4

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

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

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

但是我仍然遇到这个错误。

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

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

为什么会拒绝访问此服务?

4

2 回答 2

11

服务不能请求 UAC 提升。在我看来,您描述的 UAC 提示实际上是由安装程序请求的,而不是服务。服务通常已经使用非常特权的帐户运行,默认情况下为 LocalSystem。请确保将服务配置为使用此类特权帐户,而不是受限用户帐户。

于 2010-09-20T20:14:57.263 回答
1

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

于 2010-09-20T20:06:35.537 回答