2016-11-28 9 views
0

私はC++を使用してサービスとしてプログラムをコーディングしています。通常のプログラムとしてテストすると、関数GetCurrentDirectoryが正しいパスを返します。しかし、プログラムとしてサービスをインストールしようとすると、GetCurrentDirectoryは実行可能ファイルのパスの代わりにC:\Windows\System32を返します。GetCurrentDirectoryは実際に実行可能ファイルのパスを返しません。

実行可能ファイルのパスをサービスのために使用する方法を教えてください。

答えて

1

Windowsサービスの作業ディレクトリは常に%WINDIR%\System32です。

実行ファイルがあるディレクトリを取得するには、hModule引数にNULLを指定してGetModuleFileNameをNULLに設定し、実行可能ファイル名を手動で削除します。

+0

ありがとう、It Work – 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を使用してください(実際にしたい場合は...)
  • を使用してください。これは、使用しますが、注意するのは簡単です:それはWOW64、いくつかの仮想化環境でのいくつかのトリッキーな行動を持っており、svcshotホスティングサービス(それは少し古いのですが、あなたはthis articleを読むことをお勧めします。)
  • 使用QueryServiceConfig()ため。私がお勧めしたい何

  • 保存/共通アプリケーションデータのため、たとえば、共有知られているフォルダにデータをロード:SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
関連する問題