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:它显示所有正在运行的进程,包括服务,其中一个字段是用于运行进程的命令行,包括完整路径。

他们的命令行实用程序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

如果您的可执行文件将自身附加到特定端口,您可以解析输出

netstat -ab

可能不是最有吸引力的解决方案。

于 2008-11-18T13:09:42.847 回答
0

如果您不使用 .NET,最直接的方法是使用 Win32 的::QueryServiceConfig()函数。这将为您提供路径名称、显示名称以及有关服务的各种其他信息。

于 2008-11-18T14:50:45.920 回答
0

对于本机 Windows 代码:EXE 中的 GetModuleFileName(NULL...)(例如,不在服务加载的 DLL 中)。

于 2009-04-12T17:09:32.840 回答
-3

通常它们在 windows\system32 下运行,即使您可能已将其安装在另一个驱动器上

于 2008-11-18T13:21:26.973 回答