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

时间:2014-03-24 13:04:24

标签: c# windows-services webdav

默认安装WebClient Windows服务并设置为手动;由于我的客户的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.Start Method的MSDN,并且它似乎没有说明用户是否必须是管理员。

1 个答案:

答案 0 :(得分:1)

您需要管理权限。

您可以在关闭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();
}