Vista/7 UAC:如何降低进程权限

Posted

技术标签:

【中文标题】Vista/7 UAC:如何降低进程权限【英文标题】:Vista/7 UAC: how to lower process privileges 【发布时间】:2010-03-30 18:42:05 【问题描述】:

进程是否可以将自身从提升的 UAC 权限降低回标准用户?如果不能,提升的进程可以使用标准用户令牌启动其副本然后杀死自己吗?任何代码示例(首选 C#)?

详情:

问题: - 用户安装我的产品(用 C# 编写) - 安装程序将其 UAC 权限提升为管理员 - 最后安装程序启动我的 exe - exe从管理员那里继承提升的权限 - exe 挂载在 Windows 资源管理器中变得不可见的网络驱动器(以常规权限运行)

我考虑过的选项: 1)将安装程序分成外部exe和内部exe,以提升的权限运行。安装包含 1000 多行 NSIS 代码,我对 NSIS 一无所知 2)安装具有较低权限的驱动器。如果我这样做,Win Explorer 可以看到驱动器,但我的 exe 看不到 3) 将 EnableLinkedConnection 注册表选项设置为 1。这是不行的,因为它需要在安装过程中重新启动 PC。

请帮忙!

谢尔盖

【问题讨论】:

这可能属于 serverfault.com 或 superuser.com 没有。这是编程相关的。 【参考方案1】:

一种方式:http://www.codeproject.com/KB/vista-security/VistaElevator.aspx

另一种方式(在上一篇文章的最新评论中提到):http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

【讨论】:

我来回搜索了这个问题,包括 codeproject.com,不知何故这篇文章从未出现。正是我想要的,谢谢! 就我个人而言,我更喜欢从我的安装程序中删除“运行此应用程序” :) 这可能不方便,但 Windows Vista 和 Windows 7 在开始菜单中提供了一个搜索框,因此可以轻松找到我的应用程序。 我喜欢这篇博文和他链接到的库blogs.microsoft.co.il/blogs/sasha/archive/2009/07/09/…【参考方案2】:

不可能在所有配置中都能正常工作,有像Kyle 这样的丑陋黑客链接,但最终,没有真正的方法可以降低您的权限。既然你提到了 NSIS,碰巧它确实有一个名为 UAC 的插件可以让内部/外部实例跳舞,它并不漂亮,但它确实有效。

【讨论】:

【参考方案3】:

如果您对“hack”答案感到满意,另一个关于 NSIS 的 blog post 显示了一种更简单的方法。只需使用explorer.exe 启动另一个进程似乎 可以工作。*

C# 就是

Process.Start("explorer.exe", YourProgram.ExecutablePath)

请注意,即使您WaitForExit() explorer,您的程序也可能还没有完成!

*还要注意其中一个 cmets:“不幸的是,Windows Shell 团队已回复说“Explorer.exe AppName.exe”的当前行为是一个错误,可能无法在未来的 Windows 更新/版本中工作。应用程序应该不要依赖它。”

【讨论】:

以上是关于Vista/7 UAC:如何降低进程权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在启动程序且 UAC 被禁用时强制提示输入凭据?

通过Windows Vista / 7上的Inno Setup将文件安装到原始用户的My Docs文件夹

VC++如何创建低权限的标准用户权限进程

如何启用普通和 UAC 提升权限应用程序之间的拖放

如何使用 ctypes 运行具有提升的 UAC 权限的脚本?

Windows权限提升—令牌窃取UAC提权进程注入等提权