2010-09-20 396 views
3

我写了一个安装程序,它安装了需要启动/停止另一个服务(B)的Windows服务(A)。但是,当A尝试启动/停止B时,出现以下异常:如何安装以管理员身份运行的Windows服务?

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

为什么会访问该服务被拒绝?

+0

您能否更新问题以符合接受的答案?就我个人而言,我很想看看如何安装服务以管理员身份运行。 – tishma 2016-04-04 15:08:02

回答

7

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

+1

作为LocalSystem(而不是LocalService)安装做了窍门。谢谢! – 2010-09-22 18:57:54

1

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

+0

这个问题似乎消失了。那么我怎么才能让这个服务以管理员身份运行呢?我不会知道正确的管理员凭证。 – 2010-09-20 20:15:10

相关问题