在打开 UAC 的服务器(Windows 2008 R2)上重新启动 Windows 服务(来自 ASP.NET 应用程序)

Posted

技术标签:

【中文标题】在打开 UAC 的服务器(Windows 2008 R2)上重新启动 Windows 服务(来自 ASP.NET 应用程序)【英文标题】:Restart windows service on server (Windows 2008 R2) having UAC turned ON (from ASP.NET application) 【发布时间】: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”,但似乎没有效果。

任何帮助将不胜感激。

谢谢 阿朱

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

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

以上是关于在打开 UAC 的服务器(Windows 2008 R2)上重新启动 Windows 服务(来自 ASP.NET 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

Windows Server 2008及以上系统磁盘无法查看(About UAC and ACE)

在带有 UAC 的 Vista 上使用带有 Windows AccessCheck() 的 SSPI (NTLM) Api

win10 uac被禁用 怎么打开

启用windows功能microsoft消息队列服务器显示错误

创建 FileAdmin 组以允许域管理员在服务器 2008 r2 上完全访问文件

让 WAMP 在 Windows 启动时自动启动(无需登录或任何 UAC 干扰)