更新WIX转换

时间:2017-05-29 08:17:59

标签: wix

我正在尝试创建一个安装程序(使用WIX 3.11),它可以安装更多同一程序的实例。我设法创建了一个安装程序来执行该操作,但是在尝试更新不同实例时安装程序不起作用

这是我的代码

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Name="ABC Default" Manufacturer="Inc" Language="1033" Version="1.0.1.7"
           Id="*"
           UpgradeCode="{3984A5B2-5CDA-4EC8-933A-089E46E2D688}">
    <Package Id="*" InstallerVersion="200" Compressed="yes" InstallScope="perMachine"
             Keywords="Installer" Description="Installer"
             Comments="Instance installer" Manufacturer="Me"
             Platform="x64"/>

    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />

    <UI>
      <UIRef Id="WixUI_InstallDir" />

       <!--Skip license dialog--> 
      <Publish Dialog="WelcomeDlg"
                Control="Next"
                Event="NewDialog"
                Value="InstallDirDlg"
                Order="2">1</Publish>
      <Publish Dialog="InstallDirDlg"
                Control="Back"
                Event="NewDialog"
                Value="WelcomeDlg"
                Order="2">1</Publish>
    </UI>    

    <MajorUpgrade AllowSameVersionUpgrades="yes" Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of [ProductName] is already installed" />
    <MediaTemplate />

    <Property Id="INSTANCEID" Value="0" />

    <InstanceTransforms Property="INSTANCEID" >
      <Instance Id="DEV" ProductCode="*" UpgradeCode="{BB75B4BE-6217-4FDA-8BAC-C46B402AC0FB}" ProductName="ABC Dev" />
      <Instance Id="TEST" ProductCode="*" UpgradeCode="{ACFEFC2F-0D48-4640-9BBC-6E1162F9D1E7}" ProductName="ABC Test" />
   </InstanceTransforms>

    <Feature Id="ProductFeature" Title="Products" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>

    <CustomAction Id="SetInstanceDirectory"
                Property="InstanceDirectory"
                Value="[INSTALLFOLDER][INSTANCEID]\"/>

    <InstallExecuteSequence>
      <Custom Action="SetInstanceDirectory"
                Before="CostFinalize"><![CDATA[InstanceDirectory = ""]]></Custom>
    </InstallExecuteSequence>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="Inc" >
          <Directory Id ="InstanceDirectory" Name="Instance"/>
        </Directory>  
      </Directory>  
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="InstanceDirectory">
      <Component Id="NotepadComponent" Guid="{52BCDD67-47F3-4F04-A7F9-6CAB42010CDE}" MultiInstance="yes">
        <File Source="c:\Windows\System32\notepad.exe"/>
      </Component>
    </ComponentGroup>
  </Fragment>

</Wix>

可以看出安装程序非常简单,但我需要一些关于更新部分的帮助。

安装程序:

  • msiexec / i test_installer.msi
  • msiexec / i test_installer.msi MSINEWINSTANCE = 1 TRANSFORMS =“:DEV” / l * vx log.log
  • msiexec / i test_installer.msi MSINEWINSTANCE = 1 TRANSFORMS =“:TEST” / l * vx log.log

更新程序:

  • msiexec / i test_installer.msi
  • msiexec / i test_installer.msi TRANSFORMS =“:DEV”/ l * vx log.log

尝试更新DEV实例时,安装程​​序会尝试更新默认安装,通知用户安装是最新的,并且可以进行修复或卸载。

请帮忙。我一直在看这个问题一个多星期了。

/肯尼斯

1 个答案:

答案 0 :(得分:0)

MSINEWINSTANCE=1应始终指定,因为您的更新是作为主要升级提供的。

我刚看了一些使用实例转换的代码。首次安装和升级安装之间没有区别,命令行始终是相同的。

这是有道理的,因为主要升级就像新产品安装一样,唯一的区别是它会自动删除旧版本。