2

実行時に Windows サービスとして実行される exe の場所を見つけるにはどうすればよいですか?

4

8 に答える 8

10

レジストリ ルックアップを使用します。

例えば

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\' + ServiceDisplayName;

次に値を読み取りImagePathます。

于 2008-11-18T14:09:14.617 に答える
4

プログラムまたはツールを使用して?

後者の場合は、Sysinternals のProcess Explorerを使用することをお勧めします。これには、サービスを含む実行中のすべてのプロセスが表示され、フィールドの 1 つは、プロセスの実行に使用されるコマンド ライン (フル パスを含む) です。

彼らのコマンド ライン ユーティリティであるPsServiceも便利です。

于 2008-11-18T13:41:50.927 に答える
2

.NET - Assembly.GetExecutingAssembly().Location(他の人は を提案Application.ExecutablePathしましたが、これには への参照が必要ですSystem.Windows.Forms。これは通常、サービスでは必要ありません)

ネイティブ -GetModuleFileName(NULL, ...)

于 2008-11-18T13:33:13.737 に答える
1

これが .NET の場合は、Application.ExecutablePathが必要です (実行中の Windows サービスの独自のアプリケーション パスを取得しようとしている場合)。他の実行中の Windows サービスのパスを取得しようとしている場合、それは別の話です。

于 2008-11-18T13:11:17.073 に答える
0

ネイティブWindowsコードの場合:EXE内のGetModuleFileName(NULL ...)(たとえば、サービスによってロードされたDLL内ではありません)。

于 2009-04-12T17:09:32.840 に答える
0

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.

于 2008-11-18T14:50:45.920 に答える
0

実行可能ファイルが特定のポートに接続されている場合、出力を解析できます

netstat -ab

ただし、おそらく最も魅力的なソリューションではありません。

于 2008-11-18T13:09:42.847 に答える
-3

別のドライブにインストールした場合でも、通常は windows\system32 で実行されます

于 2008-11-18T13:21:26.973 に答える