Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix-如何在安装MSI文件时覆盖升级代码_Wix_Windows Installer - Fatal编程技术网

Wix-如何在安装MSI文件时覆盖升级代码

Wix-如何在安装MSI文件时覆盖升级代码,wix,windows-installer,Wix,Windows Installer,我正在编写一个WIX安装程序,它有两个要求: 实施升级规则(我使用或表成功地实现了这一点) 保持一种强制安装旧版本与当前版本并行的方式(因此不要升级) 问题来自第二个要求:如果应用程序的所有版本都有相同的升级代码,系统将删除旧版本(使用相同的升级代码),avec将安装新版本 那么,是否可以升级旧版本(默认情况下)并允许用户强制并行安装? 我的一个解决方案是在安装MSI时更改升级代码。在这种情况下,2个版本将完全独立,这就是我想要的 但在安装阶段,我没有找到指定另一个升级代码的方法。我尝试了msi

我正在编写一个WIX安装程序,它有两个要求:

  • 实施升级规则(我使用
    表成功地实现了这一点)
  • 保持一种强制安装旧版本与当前版本并行的方式(因此不要升级)
  • 问题来自第二个要求:如果应用程序的所有版本都有相同的升级代码,系统将删除旧版本(使用相同的升级代码),avec将安装新版本

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

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

    你知道如何在安装MSI时强制升级代码吗

    有关信息,我的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" />
    
    然后,在
    中对操作进行条件设置,使其仅在
    ALLOWUPGRADE=Yes
    时卸载旧版本:

    <Property Id="ALLOWUPGRADE" Value="Yes" />
    
    <RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts>
    

    你可以通过调节动作来做到这一点

    
    ALLOWUPGRADE=“是”
    

    默认情况下,ALLOWUPGRADE属性的值为“是”。当您不等待执行升级时,请更改它。

    效果很好,谢谢!我更新了我的帖子,并添加了一个询问是否升级的用户对话框。正在查找此问题的答案。谢谢。您应该将解决方案作为答案发布并接受它(鼓励!)而不是将其编辑到您的问题中。
    <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>
    
     <InstallExecuteSequence> 
          <RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts> 
     </InstallExecuteSequence>