C# Windows服务*非*在我的项目中的位置
如果我右键单击并在“服务”对话框中选择某个服务的属性(比如,即插即用),我会得到几条信息,包括“可执行文件的路径”。对于即插即用(在Vista中),这是: C:\Windows\system32\svchost.exe-k DcomLaunch 如果我知道服务名称(和/或显示名称),是否有办法使用.NET代码获取相同的信息C# Windows服务*非*在我的项目中的位置,c#,.net,windows-services,C#,.net,Windows Services,如果我右键单击并在“服务”对话框中选择某个服务的属性(比如,即插即用),我会得到几条信息,包括“可执行文件的路径”。对于即插即用(在Vista中),这是: C:\Windows\system32\svchost.exe-k DcomLaunch 如果我知道服务名称(和/或显示名称),是否有办法使用.NET代码获取相同的信息 (我无法使用getExecutionGassembly(),因为我没有从我的项目运行服务。)此信息在结构中。您将需要使用P/Invoke将其取出 基本过程是: 调用OpenS
(我无法使用
getExecutionGassembly()
,因为我没有从我的项目运行服务。)此信息在结构中。您将需要使用P/Invoke将其取出
基本过程是:
调用OpenSCManager获取所管理服务的句柄
调用OpenService以获取该服务的句柄
调用QueryServiceConfig以获取查询服务配置结构。此信息位于结构中。您将需要使用P/Invoke将其取出 基本过程是: 调用OpenSCManager获取所管理服务的句柄 调用OpenService以获取该服务的句柄
调用QueryServiceConfig以获取查询服务配置结构。另一个没有互操作的选项是WMI查找(或注册表位hacky!) 下面是一个快速示例,基于:
另一个没有互操作的选项是WMI查找(或注册表位hacky!) 下面是一个快速示例,基于:
始终存在所述的WMI类
Win32\u服务
,特别是路径名
这项工作:
ManagementClass mc = new ManagementClass("Win32_Service");
foreach(ManagementObject mo in mc.GetInstances())
{
if(mo.GetPropertyValue("Name").ToString() == "<Short name of your service>")
{
return mo.GetPropertyValue("PathName").ToString().Trim('"');
}
}
ManagementClass mc=新的ManagementClass(“Win32_服务”);
foreach(mc.GetInstances()中的ManagementObject mo)
{
if(mo.GetPropertyValue(“Name”).ToString()=“”)
{
返回mo.GetPropertyValue(“路径名”).ToString().Trim(“”);
}
}
如果您有任何与引用相关的问题,请在项目中添加的引用。始终存在所述的WMI类
Win32\u服务
,特别是路径名
这项工作:
ManagementClass mc = new ManagementClass("Win32_Service");
foreach(ManagementObject mo in mc.GetInstances())
{
if(mo.GetPropertyValue("Name").ToString() == "<Short name of your service>")
{
return mo.GetPropertyValue("PathName").ToString().Trim('"');
}
}
ManagementClass mc=新的ManagementClass(“Win32_服务”);
foreach(mc.GetInstances()中的ManagementObject mo)
{
if(mo.GetPropertyValue(“Name”).ToString()=“”)
{
返回mo.GetPropertyValue(“路径名”).ToString().Trim(“”);
}
}
如果您有任何与引用相关的问题,请在项目中添加引用