2016-11-28 63 views
0

我是用C++服務編碼程序的路徑,當我測試它作爲一個正常的程序,GetCurrentDirectory返回正確路徑的功能。但是,當我嘗試安裝我的程序作爲服務,GetCurrentDirectory返回C:\Windows\System32而不是可執行文件的路徑。GetCurrentDirectory並沒有真正恢復的可執行文件

我怎樣才能讓我的可執行文件的方式,將一個部門工作的路徑? Windows服務的

回答

1

工作目錄總是%WINDIR%\System32

取得目錄,你的可執行文件駐留,只需調用GetModuleFileName與NULL的hModule說法,並手動剝離可執行文件的名稱。

+0

謝謝你,它的工作 – duongtan

1

因爲%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
  • 使用WMI來列舉服務(如果你真的想......)
  • 使用GetModuleFileName()。它易於使用,但要小心:它與WOW64,某些虛擬化環境的一些棘手的行爲,併爲svcshot託管服務(這是有點老,但你可能需要閱讀this article
  • 使用QueryServiceConfig()

我建議什麼:

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