Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取windows服务在c中的安装位置#_C#_Windows_Service - Fatal编程技术网

C# 获取windows服务在c中的安装位置#

C# 获取windows服务在c中的安装位置#,c#,windows,service,C#,Windows,Service,我正在开发一个windows服务,它可以获取正在运行的系统上所有windows服务的安装位置。我试图从注册表中获取位置,但那里的名称与C#object返回的名称不一致。有什么指导方针吗 首先,你的想法是错误的。这将导致不同操作系统中的访问问题。您必须在程序文件中安装并将其注册为服务 p.S.大多数Windows服务都是从System32文件夹运行的如果您只需要查找所有Windows服务的信息,请不要开发Windows服务。只需制作一个使用WMI(Windows Management Instru

我正在开发一个windows服务,它可以获取正在运行的系统上所有windows服务的安装位置。我试图从注册表中获取位置,但那里的名称与C#object返回的名称不一致。有什么指导方针吗

首先,你的想法是错误的。这将导致不同操作系统中的访问问题。您必须在程序文件中安装并将其注册为服务


p.S.大多数Windows服务都是从System32文件夹运行的

如果您只需要查找所有Windows服务的信息,请不要开发Windows服务。只需制作一个使用WMI(Windows Management Instrumentation)的简单软件。链接会给你一个想法。该示例是用VB脚本编写的,但您可以在.NET中执行类似的操作。

我倾向于使用ServiceController查找每个已安装的服务,然后在注册表中查找路径

foreach (ServiceController c in ServiceController.GetServices())
{
     Console.WriteLine(c.DisplayName + " " + c.ServiceName);
}

事实上,现在我在谷歌上找到了一个类似的解决方案。

他不是在问,他是在问寻找每个服务位置的最佳实践。注册表给了他使用C代码的不同结果。是的,这就是我正在做的。这本身就是安装在程序文件中的windows服务。它只需要返回该系统上安装的所有服务的服务名称和服务位置,我不知道如何安装。我告诉你这种方法是错误的。从System32文件夹运行的所有windows服务。为什么您需要检查注册表。您可以使用ServiceController类检查服务信息。大家…请重新阅读答案。ServiceController类没有location对象。我重新阅读了你们的答案,但它不是解决方案,这就是我要说的。如果您使用ServiceController类中的代码来演示这一点(例如使用Winform或console应用程序而不是使用Windows服务),这将是一个很好的答案。事实上,这项服务还有其他功能,比如网络和硬件信息。WMI还允许网络和硬件信息。基本上,WMI是.NET或脚本与Windows操作系统之间的一个大层。另一种方法是使用功能强大的.NET系统类。但是,接下来,您必须学习每种类型信息的不同接口。这里的教训是,你必须阅读MSDN。@Uzair,你至少尝试过VB脚本示例吗?你可以使用PowerShell来完成它,这里:@Jeremy,我很久以前读过PoweverShell。如果我是对的,它是一个比WMI更高的层。如果不是,则在概念上是相似的。一个主要区别是PoweverShell使用脚本语言,而不是WMI。例如,一个链接是。我已经这样做了。我现在只需要使用这些服务名称从注册表获取路径。但问题是这些服务名称与注册表中使用的名称不同。我该如何解决这个问题。