【问题标题】:Restart windows service on server (Windows 2008 R2) having UAC turned ON (from ASP.NET application)在打开 UAC 的服务器(Windows 2008 R2)上重新启动 Windows 服务(来自 ASP.NET 应用程序)
【发布时间】:2012-05-21 10:17:52
【问题描述】:

我正在尝试从我的 ASP.NET (.Net 4) 应用程序重新启动 Windows 服务(应用程序的一部分),但它失败并出现错误:

Cannot open <ServiceName> service on computer '.'.
Inner Exception: Access is denied
StackTrace:  at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
   at System.ServiceProcess.ServiceController.Start(String[] args)
   at NetClient.AvailabilityConfiguration.StartAvailabilityService(ServiceController serviceName, TimeSpan timeout)

代码在我的开发机器 (Windoes 7) 和测试服务器 (Windows 2008 R2) 上运行良好,但在生产服务器上失败。唯一(也是最大的)区别是 UAC 在生产服务器上打开,而在开发和测试服务器上是关闭的。

我尝试将 app.manifest 文件添加到 Web 应用程序以获取提升的权限,但它似乎不起作用。我已将 app.manifest 的“requestedExecutionLevel”属性配置为“requireAdministrator”,但似乎没有效果。

任何帮助将不胜感激。

谢谢 阿朱

【问题讨论】:

    标签: asp.net windows-services windows-server-2008 uac


    【解决方案1】:

    我认为运行您的网络池的帐户显然无权管理服务(尤其是启动、停止、暂停命令)。

    查看您的池在哪个帐户下运行,并授予他管理服务器服务的权限。您可以使用组策略执行此操作,或打开安全模板。

    阅读How to grant users rights to manage services in Windows Server官方详细步骤

    【讨论】:

    • 我正在使用具有启动/停止服务的完全权限的有效用户进行页面(代码)模拟。如前所述,它确实适用于具有相同设置的测试/开发环境。
    • 不是用户,是必须拥有权限的池。你检查我写的有权限的东西吗?
    • 阿里斯托斯,感谢您的回复。我已经使用 subinacl 工具为运行应用程序池的帐户提供了所需的访问权限,但仍然没有乐趣!
    • Aristos,我已将您的回复标记为正确答案。问题在于 AppPool 用户没有管理服务所需的权限。作为对其他人的说明,由于某种原因,subinacl.exe 对我不起作用,但安全模板选项很有用。非常感谢!
    • 我注意到的另一件事是,在这种情况下,您不需要像我一样进行内联模拟,因为 apppool 用户本身有权管理服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多