在升级到正在卸载的 MSI 期间传递 属性
Passing property during upgrade to MSI that being uninstalled
我有一个自定义操作,我希望每次在没有 UI 的情况下执行 MSI 时执行该操作:
<InstallExecuteSequence>
<Custom Action="InitSetup" Before="CostFinalize">UILevel=2</Custom>
</InstallExecuteSequence>
执行升级时,此操作的一部分是验证命令行中提供的用户密码:
msiexec /i my.msi PROP_PASSWORD=12345
中的密码 属性 被标记为隐藏和安全:
<Property Id="PROP_PASSWORD" Hidden="yes" Secure="yes" />
在升级期间,删除旧版本时,InitSetup 再次被触发,但 PROP_PASSWORD 没有被传递给它,因此操作失败并导致整体升级失败。
有没有办法强制PROP_PASSWORD转发到正在卸载的 MSI?
条件:真的有必要在卸载时验证许可证密钥吗?您能否将自定义操作设置为在卸载时不 运行?可以将其配置为在主要升级启动的卸载时不 运行 - 与正常的手动触发卸载相反。它涉及属性UPGRADINGPRODUCTCODE
。通过将 NOT UPGRADINGPRODUCTCODE
添加到您的条件中,自定义操作将永远不会 运行 在重大升级期间。类似于:UILevel=2 AND NOT UPGRADINGPRODUCTCODE
。条件 NOT REMOVE="ALL"
也会阻止它在常规卸载时 运行ning。条件艰苦,有多种安装方式可以测试。
Persist Properties:您还可以将密码保存在注册表中,并构建您的设置以在密码存在时读取它。这涉及 WiX 可以轻松完成的注册表搜索。
Live?:你用之前的包裹住吗?如果是这样,您可以通过较小的升级来修补实时版本,以更改已安装产品的卸载顺序。在上述情况下,我建议更改自定义操作的条件,这可以通过较小的升级来实现。
Setup.exe 已启动卸载:如果您使用由 Burn 制作的 setup.exe 启动器,一个选项是是通过启动器开始卸载旧版本,而不是从实际的 MSI 本身(由于任何时候只需要一个 MSI 安装会话处于活动状态,因此具有严重的技术限制)。这将允许您将任何命令行传递给卸载例程。
在我疲惫的状态下,这就是我现在所能做的。我回头看看你是不是活着,看看我忘记说了多少。
只是为了结束关于我最终如何解决它的主题 - 或者更准确地说找到了一个解决方法:由于自定义操作有一个条件 UILevel=2 而不是使用 /q 启动静默安装,我指示使用 /qb- 升级。这会将 UILevel 设置为 3。从用户体验的角度来看,他们只会看到通知表单和进度条。它不会显示阻止对话框。
我有一个自定义操作,我希望每次在没有 UI 的情况下执行 MSI 时执行该操作:
<InstallExecuteSequence>
<Custom Action="InitSetup" Before="CostFinalize">UILevel=2</Custom>
</InstallExecuteSequence>
执行升级时,此操作的一部分是验证命令行中提供的用户密码:
msiexec /i my.msi PROP_PASSWORD=12345
中的密码 属性 被标记为隐藏和安全:
<Property Id="PROP_PASSWORD" Hidden="yes" Secure="yes" />
在升级期间,删除旧版本时,InitSetup 再次被触发,但 PROP_PASSWORD 没有被传递给它,因此操作失败并导致整体升级失败。
有没有办法强制PROP_PASSWORD转发到正在卸载的 MSI?
条件:真的有必要在卸载时验证许可证密钥吗?您能否将自定义操作设置为在卸载时不 运行?可以将其配置为在主要升级启动的卸载时不 运行 - 与正常的手动触发卸载相反。它涉及属性UPGRADINGPRODUCTCODE
。通过将 NOT UPGRADINGPRODUCTCODE
添加到您的条件中,自定义操作将永远不会 运行 在重大升级期间。类似于:UILevel=2 AND NOT UPGRADINGPRODUCTCODE
。条件 NOT REMOVE="ALL"
也会阻止它在常规卸载时 运行ning。条件艰苦,有多种安装方式可以测试。
Persist Properties:您还可以将密码保存在注册表中,并构建您的设置以在密码存在时读取它。这涉及 WiX 可以轻松完成的注册表搜索。
Live?:你用之前的包裹住吗?如果是这样,您可以通过较小的升级来修补实时版本,以更改已安装产品的卸载顺序。在上述情况下,我建议更改自定义操作的条件,这可以通过较小的升级来实现。
Setup.exe 已启动卸载:如果您使用由 Burn 制作的 setup.exe 启动器,一个选项是是通过启动器开始卸载旧版本,而不是从实际的 MSI 本身(由于任何时候只需要一个 MSI 安装会话处于活动状态,因此具有严重的技术限制)。这将允许您将任何命令行传递给卸载例程。
在我疲惫的状态下,这就是我现在所能做的。我回头看看你是不是活着,看看我忘记说了多少。
只是为了结束关于我最终如何解决它的主题 - 或者更准确地说找到了一个解决方法:由于自定义操作有一个条件 UILevel=2 而不是使用 /q 启动静默安装,我指示使用 /qb- 升级。这会将 UILevel 设置为 3。从用户体验的角度来看,他们只会看到通知表单和进度条。它不会显示阻止对话框。