首页 文章

Wix - 如何在安装MSI文件时覆盖UpgradeCode

提问于
浏览
2

我正在编写一个包含2个要求的WIX安装程序:

  • 实施升级规则(我用 <MajorUpgrade><Upgrade> 表成功完成了

  • 保持一种强制安装旧版本与当前版本并行的方法(所以不要升级) .

问题来自第二个要求:如果应用程序的所有版本都具有相同的UpgradeCode,系统将删除旧的(具有相同的UpgradeCode)avec安装新的版本 .

那么是否可以升级旧版本(默认情况下)并让用户强制并行安装?我有一个解决方案是在安装MSI时更改UpgradeCode . 在这种情况下,2个版本将完全独立,这就是我想要的 .

但我没有找到在安装阶段指定另一个UpgradeCode的方法 . 我尝试了 msiexec /i app.msi UpgradeCode="{60C200E9-E317-4a67-9CC1-7BF156DEF4FD}" ,但是根据日志它正确获取了UpgradeCode属性,但在构建MSI时仍然使用GUID指定 .

知道如何在安装MSI时强制使用UpgradeCode吗?

有关信息,我的Wix文件组成如下:

<?define ProductUpgradeCode = "32318521-631C-4064-88C6-4A54FAA3B383"?>
[...]
<Product Name='App' Id='*' UpgradeCode='$(var.ProductUpgradeCode)'
Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='App inc'>
[...]
<MajorUpgrade AllowDowngrades="yes" Schedule="afterInstallInitialize" />

Edit - Solution ,根据Ciprian的回答:

首先,使用 Yes 的默认值定义 ALLOWUPGRADE 属性:

<Property Id="ALLOWUPGRADE" Value="Yes" />

然后,调整 <InstallExecuteSequence> 中的操作,因此只有 ALLOWUPGRADE=Yes 才会卸载旧版本:

<RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts>

而且,更好的是,添加一个对话框,询问用户是否要升级或进行并行安装 . 按钮 ParallelInstallBtn 会将属性值更改为 No . 如果 UpgradeVersion 部分检测到旧版本,则会在 FindRelatedProducts 之后调用此对话框:

<UI>
  <Dialog Id="InstallDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
    [...]
    <Control Id="ParallelInstallBtn" Type="PushButton" X="280" Y="243" Width="80" Height="17" Default="no" Text="&amp;Parallel Install">
      <Publish Property="ALLOWUPGRADE" Value="No">1</Publish>
      <Publish Event="EndDialog" Value="Return">1</Publish>
    </Control>
  </Dialog>
  <InstallUISequence>
    <Show Dialog="InstallDlg" After="FindRelatedProducts">OLDERVERSIONBEINGUPGRADED</Show>
  </InstallUISequence>
</UI>

1 回答

  • 3

    您可以通过调整RemoveExistingProducts动作来完成此操作 .

    <InstallExecuteSequence> 
          <RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts> 
     </InstallExecuteSequence>
    

    默认情况下,ALLOWUPGRADE属性的值为“是” . 如果您没有看到要执行的升级,请更改它 .

相关问题