我是用C++服務編碼程序的路徑,當我測試它作爲一個正常的程序,GetCurrentDirectory
返回正確路徑的功能。但是,當我嘗試安裝我的程序作爲服務,GetCurrentDirectory
返回C:\Windows\System32
而不是可執行文件的路徑。GetCurrentDirectory並沒有真正恢復的可執行文件
我怎樣才能讓我的可執行文件的方式,將一個部門工作的路徑? Windows服務的
我是用C++服務編碼程序的路徑,當我測試它作爲一個正常的程序,GetCurrentDirectory
返回正確路徑的功能。但是,當我嘗試安裝我的程序作爲服務,GetCurrentDirectory
返回C:\Windows\System32
而不是可執行文件的路徑。GetCurrentDirectory並沒有真正恢復的可執行文件
我怎樣才能讓我的可執行文件的方式,將一個部門工作的路徑? Windows服務的
工作目錄總是%WINDIR%\System32
。
取得目錄,你的可執行文件駐留,只需調用GetModuleFileName與NULL的hModule
說法,並手動剝離可執行文件的名稱。
因爲%WinDir%\System32
是32/64位Windows服務的默認工作目錄(用於64位Windows的32位服務的%WinDir%\SysWOW64
)。
您可以設定工作服務的目錄到別的東西,也看到Windows Service: Can I configure the current working directory?或 - 更好 - 不依賴於你對工作目錄的代碼。幾個選項:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<service name>\ImagePath
。GetModuleFileName()
。它易於使用,但要小心:它與WOW64,某些虛擬化環境的一些棘手的行爲,併爲svcshot
託管服務(這是有點老,但你可能需要閱讀this article)QueryServiceConfig()
。我建議什麼:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。
謝謝你,它的工作 – duongtan