簡體   English   中英

GetCurrentDirectory並不真正返回可執行文件的路徑

[英]GetCurrentDirectory does not really return the path of the executable file

我正在使用c ++將程序編碼為服務,當我將其作為普通程序進行測試時,函數GetCurrentDirectory返回正確的路徑。 但是,當我嘗試將程序安裝為服務時, GetCurrentDirectory返回C:\\Windows\\System32而不是可執行文件的路徑。

如何以適用於服務的方式獲取可執行文件的路徑?

Windows服務的工作目錄始終為%WINDIR%\\System32

要獲取可執行文件所在的目錄,只需將hModule參數的NULL調用GetModuleFileName ,並手動剝離可執行文件名稱。

因為%WinDir%\\System32是32/64位Windows服務的默認工作目錄( %WinDir%\\SysWOW64是64位Windows上的32位服務)。

您可以將服務的工作目錄設置為其他目錄,另請參見Windows服務:我可以配置當前的工作目錄嗎? 或者-更好-不要在您的代碼中使用工作目錄。 幾種選擇:

  • 從注冊表中讀取它: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\<service name>\\ImagePath
  • 使用WMI枚舉服務(如果您確實要...)
  • 使用GetModuleFileName() 它易於使用,但要小心:它在WOW64,某些虛擬化環境以及svcshot托管服務中具有一些棘手的行為(雖然有點陳舊,但您可能需要閱讀本文 。)
  • 使用QueryServiceConfig()

我的建議是:

  • 將數據保存/加載到共享的已知文件夾中,例如用於通用應用程序數據: SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM