我创建了一个带有WIX的MSI,需要提升的权限才能正常工作。在MSI项目中,我通过
指定了这个<Package [...] InstallPrivileges="elevated" />
现在我将此MSI包含在基于WixWPF Bootstrapper的自定义bootsrapper项目中。 据我了解,引导程序本身不应该改变机器状态,因此不需要提升权限。
我现在希望Bootstrapper能够自动启动具有提升权限的集成MSI,并在必要时提示用户使用UAC对话框。但事实并非如此。相反,安装失败了。 但是,当我以管理员身份明确地运行引导程序可执行文件时,它可以工作。
如何在安装MSI时让引导程序要求提升权限?
答案 0 :(得分:17)
由于未设置MSI的INSTALLSCOPE属性,因此默认为每用户安装,并且引导程序应用程序认为它不需要任何ADMIN / Elevated权限来运行它。
现在,在您的情况下,您是MSI的作者,您可以轻松地将InstallScope添加到package元素中。
InstallScope="perMachine"
如果您不是MSI的作者,仍然引导程序提供了一个属性,您可以使用该属性强制每台机器进行MSI / EXE。
那么为什么Bootstrapper认为Per-Machine安装需要提升权限而Per-User不需要?很简单,每个用户安装注册表值写在HKEY_CURRENT_USER下,对于每台机器安装,注册表值写在HKEY_LOCAL_MACHINE下。只有管理员用户可以读/写HKLM。