已安装WebClient
Windows Service,默认设置为Manual;由于客户的IT限制,我无法将其更改为自动。
当服务停止时,我尝试使用Directory.EnumerateDirectories
访问文件,我得到一个异常:
类型为'System.IO.DirectoryNotFoundException'的未处理异常发生在mscorlib.dll
附加信息:无法找到路径的一部分" mysever myfolder"。
当WebClient服务启动时,这个工作正常。
当WebClient服务作为此请求的一部分启动时,使用资源管理器访问路径可以正常工作。
从代码中,我如何告诉Windows我想要访问WebClient服务,以便它应该启动它?
我有以下(工作)代码,但我不确定这是否需要管理员权限,或者是否有更好的方法来做到这一点:
using (ServiceController serviceController = new ServiceController("WebClient"))
{
serviceController.Start();
serviceController.WaitForStatus(ServiceControllerStatus.Running);
}
实际上,我想做的就是执行命令net start WebClient
,上面的代码是最干净的方式来做到这一点,是否有任何安全限制,我需要知道在一个锁定的环境?
我已经检查了ServiceController的MSDN。Start方法并没有说明用户是否必须是管理员
您需要管理员权限。
您可以在关闭WebClient服务的计算机上的控制台应用程序中使用以下代码进行测试。在没有管理权限的情况下运行会导致"无法在计算机上启动服务"。
static void Main(string[] args)
{
string serviceToRun = "WebClient";
using (ServiceController serviceController = new ServiceController(serviceToRun))
{
Console.WriteLine(string.Format("Current Status of {0}: {1}", serviceToRun, serviceController.Status));
if (serviceController.Status == ServiceControllerStatus.Stopped)
{
Console.WriteLine(string.Format("Starting {0}", serviceToRun));
serviceController.Start();
serviceController.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 20));
Console.WriteLine(string.Format("{0} {1}", serviceToRun, serviceController.Status));
}
}
Console.ReadLine();
}