Windows installer 在升级到要卸载的MSI期间传递属性

Windows installer 在升级到要卸载的MSI期间传递属性,windows-installer,wix3.5,wix3,Windows Installer,Wix3.5,Wix3,我有一个自定义操作,每次在没有UI的情况下执行MSI时,我都希望执行该操作: <InstallExecuteSequence> <Custom Action="InitSetup" Before="CostFinalize">UILevel=2</Custom> </InstallExecuteSequence> UILevel=2 执行升级时,此操作的一部分是验证命令行中提供的用户密码: msiexec/i my.msi PROP_PA

我有一个自定义操作,每次在没有UI的情况下执行MSI时,我都希望执行该操作:

<InstallExecuteSequence>
  <Custom Action="InitSetup" Before="CostFinalize">UILevel=2</Custom>
</InstallExecuteSequence>

UILevel=2
执行升级时,此操作的一部分是验证命令行中提供的用户密码:

msiexec/i my.msi PROP_PASSWORD=12345

中的密码属性被标记为隐藏且安全:

<Property Id="PROP_PASSWORD" Hidden="yes" Secure="yes" />

在升级过程中,删除旧版本时,会再次触发InitSetup,但未向其传递PROP_密码,因此操作失败,导致整体升级失败

是否有办法强制将PROP_密码转发到正在卸载的MSI?

条件设置:卸载时是否确实需要验证许可证密钥?是否可以将自定义操作设置为卸载时不运行?可以将其配置为不在主要升级启动的卸载上运行-与正常的手动触发卸载相反。它涉及到财产。通过将
不升级ProductCode
添加到您的条件中,自定义操作将永远不会在主要升级期间运行。类似于:
UILevel=2,而不是升级ProductCode
。条件
NOT REMOVE=“ALL”
也会阻止它在定期卸载时运行。条件艰苦-有许多安装模式需要测试

持久化属性:您还可以在注册表中持久化密码,并构建设置,以便在密码存在时将其读回。这涉及到WiX可以轻松完成的注册表搜索

直播?:您是否与以前的套餐一起直播?如果是这样,您可以通过小升级来修补live版本,以更改已安装产品的卸载顺序。在上述情况下,我建议更改自定义操作的条件,只需稍微升级即可

Setup.exe启动的卸载:如果使用Burn制作的Setup.exe启动程序,一个选项是通过启动程序启动旧版本的卸载,而不是从实际的MSI本身启动卸载(由于要求在任何时候只激活一个MSI安装会话,因此具有严重的技术限制). 这将允许您将任何命令行传递给卸载例程


在我疲惫的状态下,这就是我现在能做的一切。我会回来看看你是否还活着,看看我有多少忘记了提及。

我只是想结束一个问题,看看我最终是如何解决的——或者更准确地说,找到了一个解决办法:因为自定义操作的条件是UILevel=2,而不是使用/q启动静默安装,我指示使用/qb-升级。这将把UILevel设置为3。从用户体验的角度来看,他们只会看到通知表单和进度条。它不会显示阻止对话框。

谢谢您的回复。我和原包装住在一起。我如何修补它以更改卸载顺序而不首先触发它?。它是对已安装产品的“就地”升级,而不是卸载旧版本并安装新版本(这就是主要升级)。请查看该链接以了解更多信息。为将来的版本分发次要升级有一些挑战,因为您需要它来迁移较旧的实例。我会看看是否能找到一些相关链接(除非它是一个“内部公司包”,您可以完全控制分销系统和apprach)。