Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
如何从服务中列出Windows服务_Windows_Service_Windows Services - Fatal编程技术网

如何从服务中列出Windows服务

如何从服务中列出Windows服务,windows,service,windows-services,Windows,Service,Windows Services,sc query state=命令行中的所有工作按预期进行 当然,在另一个服务中,sc query state=all不会向父进程捕获的子进程的stdout打印任何内容 服务是否有列出/启动/停止其他服务所需的权限/特权 一点背景:我正在创建一个服务,它会定期重新启动一些不正常的服务。好吧,如果你不这样做,至少不会以阻塞的方式。为了让您自己的服务响应SCM服务控制管理器以返回其状态,服务必须能够执行其调度程序代码。这意味着,如果您调用此程序并等待它退出,您将无限期地等待。缓解这种情况的一种方法是

sc query state=命令行中的所有工作按预期进行

当然,在另一个服务中,sc query state=all不会向父进程捕获的子进程的stdout打印任何内容

服务是否有列出/启动/停止其他服务所需的权限/特权


一点背景:我正在创建一个服务,它会定期重新启动一些不正常的服务。

好吧,如果你不这样做,至少不会以阻塞的方式。为了让您自己的服务响应SCM服务控制管理器以返回其状态,服务必须能够执行其调度程序代码。这意味着,如果您调用此程序并等待它退出,您将无限期地等待。缓解这种情况的一种方法是将其放在一个单独的线程中,这样它就不会阻止您的调度,并且您的服务将继续与SCM通信

或者,您可以使用EnumServicesStatusEx函数与SCM对话并自己查询其他服务的状态,这可能更好。函数本身没有提到任何关于阻塞的内容,因此您必须自己确定是否阻塞,然后再次使用线程来防止您的服务停止与SCM对话


最后一点注意:如果这些行为不端的服务是您的,您应该更可能修复相应的代码。我有一部分遗留代码,有一个行为不端的服务,它有自己的助手应用程序,因为故障操作可以在服务配置中配置为服务(service)配置(CONFIG)失败(FAILURE)操作,在服务崩溃时将继续并重新启动服务。一旦我接收了代码,找出了原因并修复了它,服务又恢复了稳定,不再需要该应用程序。

Hmm,在写下我的答案后,我注意到你甚至没有指定你使用的编程语言。首先,检查您的代码在作为常规应用程序而不是服务运行时是否工作。dispatcher调用总是在一个单独的线程中进行,因此ServiceMain线程是否阻塞并不重要。@Harry Johnston:好吧,因为他没有显示调用进程的位置,所以我不想假设这一点。但是谢谢你的澄清。