使用“添加\删除程序”更改产品配置时,Windows不会提示提升

时间:2014-01-03 00:26:32

标签: windows-installer

我们使用InstallShield创建了一个MSI安装程序,它表现出以下行为。

运行安装引导程序会提示用户运行提升。

安装产品后,我可以打开Add \ Remove程序列表,右键单击产品并选择修改。修改UI运行,我可以选择最初未安装的安装功能。

当我点击“完成”按钮时,我希望提示提升。但我不是。该功能将部分安装,例如文件将写入“Program Files”文件夹,但某些自定义操作失败(例如启动Windows服务)。

如果我使用MsiExec.exe从提升的命令提示符启动修改序列,一切正常。

我检查了摘要信息流中的“要求管理权限”设置为“是”,并且引导程序设置为要求管理员权限。

我创建了一个新的空安装程序项目,其设置似乎相同且行为正确,即在修改产品配置时单击“完成”按钮时会提示提升。

还有什么可能是错的?

1 个答案:

答案 0 :(得分:1)

当您最初运行EXE时,清单会提升EXE,从而提升msiexec客户端和服务器进程。整个MSI以更多权限运行,然后是合适的。稍等一下。

执行ARP修改时,Windows会直接绕过EXE调用Msiexec。由于安装程序是基于每台计算机安装的,因此Windows安装程序已经信任(管理)安装程序,因此不需要UAC提示。客户端(安装UI序列)将在没有提升的情况下运行,并且延迟没有模拟服务器端的自定义操作/标准操作(InstallExecuteSequence)将在系统上下文中运行。然后,它返回到UI序列,并在单击“完成”时退出。没有期望提升。

现在,关于那些自定义操作。由于它们失败了,这告诉我你没有正确地创作它们。您没有提到用于创建MSI的工具。如果它是Visual Studio安装和部署项目(.VDPROJ),您应该知道Microsoft在将来的VS版本中弃用了此工具。他们这样做的原因之一是它无法公开大部分自定义动作创作开关(它将其封装为Install,Uninstall,Rollback,Commit),当它这样做时,它们被安排为Deferred with Impersonation,这是不正确的仅当setup.exe不恰当地提升整个安装程序时才会起作用。

如需更多了解,请参阅:Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

这些是我在许多安装人员工作多年后的经过深思熟虑的猜测。只有对项目进行彻底的架构/代码审查才能证实我的怀疑。