[英]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
。 GetModuleFileName()
。 它易於使用,但要小心:它在WOW64,某些虛擬化環境以及svcshot
托管服務中具有一些棘手的行為(雖然有點陳舊,但您可能需要閱讀本文 。) QueryServiceConfig()
。 我的建議是:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.