如何安装以管理员身份运行的Windows服务?

时间:2010-09-20 20:03:58

标签: .net windows-services admin-rights

我编写了一个安装程序,用于安装需要启动/停止其他服务的Windows服务(A)(B)。但是,当A试图启动/停止B时,我得到了这个例外:

System.InvalidOperationException:无法在计算机上打开MyService服务'。'。 ---> System.ComponentModel.Win32Exception:访问被拒绝

安装程序将服务作为本地服务安装,并通过我授予的UAC弹出窗口请求管理员权限。我还在设置为要求管理员权限的服务中添加了app.manifest文件:

然而我仍然遇到了这个错误。

这就是我启动服务的方式(停止是相同的,当然除了调用Stop):

using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
    mutex.WaitOne();

    if (ServiceExists(serviceName) == true)
    {
        using (ServiceController serviceController = new ServiceController(serviceName, "."))
        {
            serviceController.Start(); // this line throws the exception
        }
    }

    mutex.ReleaseMutex();
}

为什么可以拒绝访问此服务?

2 个答案:

答案 0 :(得分:8)

服务无法要求UAC提升。听起来,您描述的UAC提示实际上是由安装程序而不是服务请求的。服务通常使用特权帐户运行,默认情况下为LocalSystem。请确保将服务配置为使用此特权帐户,而不是受限制的用户帐户。

答案 1 :(得分:1)

作为快速测试,如果您打开services.msc并检查服务器“运行”并输入您的凭据,错误是否会消失?可能是LocalService无权阻止其他服务。提供UAC提示权限可能只允许您首先安装服务,而不是告诉它以管理员身份运行。