如何安装以管理员身份运行的Windows服务?
我写了一个安装程序,它安装了需要启动/停止另一个服务(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();
}
为什么会访问该服务被拒绝?
服务不能要求UAC提升。在我看来,您所描述的UAC提示实际上是由安装者请求的,而不是服务请求。服务通常使用非常特权的帐户运行,默认情况下为LocalSystem。请确保您将服务配置为使用此类特权帐户,而不是受限用户帐户。
作为LocalSystem(而不是LocalService)安装做了窍门。谢谢! – 2010-09-22 18:57:54
作为一个快速测试,如果你打开services.msc
并检查你的服务器“运行”并输入你的凭证,错误消失了吗?这可能是LocalService无法阻止其他服务。提供UAC提示权限可能只允许您首先安装服务,而不是以管理员身份运行。
这个问题似乎消失了。那么我怎么才能让这个服务以管理员身份运行呢?我不会知道正确的管理员凭证。 – 2010-09-20 20:15:10
您能否更新问题以符合接受的答案?就我个人而言,我很想看看如何安装服务以管理员身份运行。 – tishma 2016-04-04 15:08:02