実行時に Windows サービスとして実行される exe の場所を見つけるにはどうすればよいですか?
8 に答える
レジストリ ルックアップを使用します。
例えば
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\' + ServiceDisplayName;
次に値を読み取りImagePath
ます。
プログラムまたはツールを使用して?
後者の場合は、Sysinternals のProcess Explorerを使用することをお勧めします。これには、サービスを含む実行中のすべてのプロセスが表示され、フィールドの 1 つは、プロセスの実行に使用されるコマンド ライン (フル パスを含む) です。
彼らのコマンド ライン ユーティリティであるPsServiceも便利です。
.NET - Assembly.GetExecutingAssembly().Location
(他の人は を提案Application.ExecutablePath
しましたが、これには への参照が必要ですSystem.Windows.Forms
。これは通常、サービスでは必要ありません)
ネイティブ -GetModuleFileName(NULL, ...)
これが .NET の場合は、Application.ExecutablePathが必要です (実行中の Windows サービスの独自のアプリケーション パスを取得しようとしている場合)。他の実行中の Windows サービスのパスを取得しようとしている場合、それは別の話です。
ネイティブWindowsコードの場合:EXE内のGetModuleFileName(NULL ...)(たとえば、サービスによってロードされたDLL内ではありません)。
If you're not using .NET, the most straight-forward way is to use Win32's ::QueryServiceConfig() function. This will give you the path name, the display name, and all sorts of other information about the service.
実行可能ファイルが特定のポートに接続されている場合、出力を解析できます
netstat -ab
ただし、おそらく最も魅力的なソリューションではありません。
別のドライブにインストールした場合でも、通常は windows\system32 で実行されます