如何在UAC提升的安装程序中以普通用户身份启动程序

7
我正在编写一个 NSIS 安装程序,该安装程序在 Windows 7 / Vista 上根据需要以“管理员”身份运行。 我需要在安装结束时运行安装的程序,并且不希望使用与安装程序相同的权限来启动它。
常规的 NSIS exec 命令会使用与安装程序相同的权限运行子进程。
NSIS 有一个 UAC 插件,但是其文档不是很好,而且似乎是最新版本;我不想使用该插件。
理想情况下,我正在寻找一个小型的 .exe 文件,可以在不使用 UAC 提升的情况下启动目标程序。这种东西存在吗?
还有其他建议吗?
谢谢!
2个回答

4

你只有两个选择:

  • 取消勾选并删除运行复选框(在NT6+上运行时)
  • 使用UAC插件(它并不是那么新,但使用起来很麻烦,所以我建议你选择第一个选项)

由于从提升的进程中无法回到原始用户,因此没有外部程序可用(你可以尝试,并且可以接近,但在每种情况下都无法获得正确的用户)。


2
我们选择了选项1,但这并不是“理想的”。微软是否已经使得运行一个“去提权”进程变得不可能?没有API似乎很荒谬。我对NSIS还不太熟悉,不确定UAC如何与MultiUser.nsh脚本交互。所以,这是另一个我不想处理的复杂问题。 - KZ.
3
@KZ:是的,从已提升权限的进程启动一个未提升权限的进程是不可能的。唯一的解决方法是从未提升权限的进程开始,让它启动你的提升权限进程,并在需要启动某些内容时,让提升权限的进程与未提升权限的进程进行通信。这就是UAC插件所做的。我已经使用它很多个月了,没有遇到任何问题。 - Daniel Stutzbach
好的,那么回到选项1和2。我想我会在以后的版本中集成UAC插件。感谢您的帮助! - KZ.
1
你说你自己的插件很难用?不管怎样,我成功地使用了它,所以它是可以使用的。 - Uwe Keim
@Harry 或许可以在与MSI相关的问题中询问?我怀疑这个函数会抛出异常。无论如何,在评论中解决这样的问题是不可能的。 - Anders
显示剩余4条评论

0

如果运行安装程序的用户(RunAs/Secondary Logon)与登录用户/资源管理器 shell 不同怎么办?在所有情况下,根本就没有可行的回退方法! - Anders
为什么微软没有直接提供做这件事的方法呢?太奇怪了!既然这在典型情况下可行(最终用户以提升权限模式运行我们的安装程序),那对我们来说就可以工作。但是,唉... - Mordachai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接