如何以管理员权限从 Windows 服务运行程序

Posted

技术标签:

【中文标题】如何以管理员权限从 Windows 服务运行程序【英文标题】:How to run a program from windows service with administrator privileges 【发布时间】:2014-12-03 04:53:40 【问题描述】:

我创建了一个在 Windows 启动时运行程序的 Windows 服务,但使用此解决方案,程序在没有管理员权限的情况下运行。但是,如果我通过单击“开始”菜单上的程序快捷方式来运行该程序,它将以管理员权限运行

我用这段代码来运行程序:

ApplicationLoader.PROCESS_INFORMATION procInfo;

ApplicationLoader.StartProcessAndBypassUAC(program_name, out procInfo);

那么如何以管理员权限运行这个程序呢? 谢谢

【问题讨论】:

有还是没有?我想你想问如何在没有提升权限的情况下从 Windows 服务启动程序。 我需要以管理员权限运行 转到开始 > 运行,然后输入 services.msc 并运行它。然后找到服务,右键查看属性。转到登录选项卡,请告诉我们登录选项卡上设置了哪些用户。 这是本地系统帐户 Avoiding UAC but launching an elevated process using a windows service 的可能重复项 【参考方案1】:

以管理员身份运行(程序)

右键单击并选择“以管理员身份运行”(一次性/临时)

或右键单击并选择属性> 兼容性> 选中“以管理员身份运行此程序”(永久设置;也可以方便地在快捷方式上设置此属性(这基本上是开始菜单项))

不以管理员身份运行(服务)

对于服务,要使其不以管理员身份运行,请打开服务管理单元(从命令提示符运行services.msc)并右键单击以编辑服务属性,然后在“登录”选项卡上更新用户信息.

更新

您似乎使用了 CodeProject 文章中的一些代码,该文章包装了 Windows API 函数 CreateProcessAsUser (http://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-and-bit-Archite)。确保您阅读了该文章并按照步骤操作。您可能没有在服务上设置正确的用户,或者您当前的用户可能没有正确的权限,或者可能不是管理员的成员等。

【讨论】:

但是当我从 Windows 服务启动这个程序时,它不能以管理员身份运行 这与您在问题中所说的相反。请查看并更新您的问题。此外,同样的事情也适用.. 只需查看服务的属性,将登录选项卡更改为管理员用户。 IIRC,该代码仅适用于 Windows Vista,不适用于更高版本的 Windows。

以上是关于如何以管理员权限从 Windows 服务运行程序的主要内容,如果未能解决你的问题,请参考以下文章

程序启动时如何请求管理员权限?

如何以管理员权限启动 Windows 服务

bat如何自动获取管理员权限

在Windows 7下调试需要管理员权限的程序

如何让msvsmon.exe 以服务方式运行

WCF 服务在没有管理员权限的情况下无法运行