MSI 是不是能够自动启动具有提升权限的程序/文件?

Posted

技术标签:

【中文标题】MSI 是不是能够自动启动具有提升权限的程序/文件?【英文标题】:Would an MSI able to launch programs/files with elevated permissions automatically?MSI 是否能够自动启动具有提升权限的程序/文件? 【发布时间】:2011-05-31 17:10:58 【问题描述】:

我正在尝试使 .msi 文件能够打开一个可执行文件,该可执行文件将注册一个浏览器帮助对象。由于这涉及写入注册表,因此必须使用管理权限提升 cmd.exe。我可以操纵 ShellExecute() 函数来弹出一个 UAC 对话框并询问用户是否想以管理员身份运行 cmd,但是,我不想让用户对安装进行任何控制。许多在线研究使我得出结论,没有管理权限就不可能使用浏览器帮助对象,所以我的问题是:假设安装程序已经运行,cmd.exe 是否能够继承 msi 安装程序的权限行政权利?无济于事,我也尝试过以管理员身份自动运行cmd。我感谢任何指导或帮助,非常感谢!

【问题讨论】:

您为什么要尝试创建一个单独的进程来写入注册表,而不是让 MSI 写入必要的更改? MSI 正在由 Windows 安装程序执行,它应该已经提升。 【参考方案1】:

您应该能够在大约 100 行 WiX 中不使用 CMD 来实现这一点,并且只需手动编写所需的注册表项,无需执行 cmd.exe 或 regsvr32。请注意,自行注册(您正在尝试做的事情)是一种非常糟糕的做法,会导致安装混乱。

以下命令应该可以帮助您入门:

heat.exe file MyBHO.dll -o MyBHO.wxs -template product -ag -suid

【讨论】:

【参考方案2】:

我的理解是,如果启用了 UAC,则应该无法绕过它。如果有,那就是一种利用,应该避免。

【讨论】:

MSI 本身不会提示提升权限吗?如果是这样,你会认为额外的提示是多余的。 @JAB,在我自己测试之前我无法确定,谢谢!

以上是关于MSI 是不是能够自动启动具有提升权限的程序/文件?的主要内容,如果未能解决你的问题,请参考以下文章

VC如何将自身进程提升至管理员权限

使用 zip 文件打包文件而不是 MSI

具有每个用户和管理部分的 Windows 安装程序

仅在需要时使 Inno Setup 安装程序请求权限提升

如何从具有管理员权限的进程中启动没有管理员权限的新进程?

批处理文件:删除提升的权限(以原始用户身份运行命令)