在代码中从手动状态启动WebClient Windows服务



已安装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();
}

相关内容

  • 没有找到相关文章

最新更新