[英]Cannot stop the service using ServiceController in .NET 3.5
我在.NET 3.5中工作,使用ServiceController停止某些服务时遇到问题。 我搜索了整个互联网,但没有找到解决问题的办法;)
这是我的方法:
using (ServiceController service = new ServiceController("Service")) { try { TimeSpan timeout = TimeSpan.FromSeconds(timeoutSeconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
我一直等到服务停止。 然后我要替换它的库(更新它)。 并抛出异常:
UnauthorizedAccessException异常详细信息:System.UnauthorizedAccessException:拒绝访问“ blablabla”路径。
我确定我可以访问此路径,因为我以管理员身份运行应用程序。
执行这段代码时,有趣的是,该服务从当前服务列表中消失(在任务管理器中)。 因此它实际上停止了它,但是某些线程仍必须使用它,因此我无法移动任何Service的文件。 即使我尝试自己移动文件(我转到“服务”目录并尝试使用鼠标移动其文件),也无法做到。 但是,当我手动停止服务(任务管理器和“结束任务”)时,我可以使用其文件进行任何操作。 那么从C#代码停止它(使用ServiceController)和使用任务管理器停止它之间有什么区别?
我不知道它是否重要,但是我在Windows Server 2008的Virtual Box中运行此应用程序(和此服务)。 (我需要在其他计算机而非计算机上运行它)。
有什么想法可以解决这个问题吗? ;)
谢谢你的帮助。
最好的祝福,皮特。
好,我解决了我的问题。
首先,我使用Net Stop
的Administrator Command-Prompt Command
来停止该Service
,该Service
可以正常工作 ,但是我开始想知道为什么。 答案是花了很多时间! ServiceController
实际上停止了它,但是某些进程仍在使用它。
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
也可以很好地工作,因为它可以即时更改服务的状态(这只是Windows Services
列表中的一项更改),但是使用某些Service礼貌地关闭所有线程需要一些时间:)
因此,您需要做的就是等待,然后再次检查它是否仍在运行。 如果是这样,则使用Process
类将其杀死。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.