我在 .NET 3.5 中工作,并且在使用 ServiceController 停止某些服务时遇到了问题。我搜索了整个互联网,但没有找到解决问题的方法;)
我是这样做的:
使用 (ServiceController service = new ServiceController("Service")) { 尝试 { TimeSpan 超时 = TimeSpan.FromSeconds(timeoutSeconds); 服务.停止(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } 捕捉(例外前) { Console.WriteLine(ex.ToString()); } }
我正在等到我的服务停止。然后我想替换它的库(更新它)。并抛出异常:
UnauthorizedAccessException 异常详细信息:System.UnauthorizedAccessException:对路径“blablabla”的访问被拒绝。
我确定我可以访问此路径,因为我以管理员身份运行我的应用程序。
有趣的是,当这段代码执行时,该服务从当前服务列表中消失(在任务管理器中)。所以它实际上停止了它,但是一些线程仍然必须使用它,所以我不能移动任何服务的文件。即使我尝试自己移动文件(我转到服务目录并尝试使用鼠标移动其文件)我也做不到。但是当我手动停止服务(任务管理器和“结束任务”)时,我可以对它的文件做任何我想做的事情。那么从 C# 代码(使用 ServiceController)停止它和使用任务管理器停止它有什么区别?
我不知道这是否重要,但我在 Virtual Box 的 Windows Server 2008 上运行此应用程序(和此服务)。(我需要在其他机器上运行它,然后是我的电脑)。
有什么想法可以解决这个问题吗?;)
谢谢你的帮助。
最好的祝愿,皮特。