在Wix中删除新版本后,如何保留先前版本的文件关联



i具有使用WIX文件关联的File Type XYZ(可执行product.exe)的版本1.0.0和v2.0.0的产品。当产品安装v1.0.0时,则关联文件扩展名xyz。接下来,我安装了产品v2.0.0,现在文件xyz与产品a v2.0.0关联。如果首先安装了2.0.0,则文件关联被覆盖为预期,反之亦然。

如果我卸载了v2.0.0,则删除了2.0.0的文件关联,并且v1.0.0的关联未恢复,并且vice-vices-vice-vice-vices。

如何使用Wix自动恢复以上版本的文件关联?请在下面查看我的Wix代码,并建议任何可能的更正。

产品A V1.0.0 Wix 3.8代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="PUT-GUID-HERE" Name="Product A 1.0" Language="1033" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />
        <Feature Id="ProductFeature" Title="Product A 1.0" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="Product A 1.0" />
            </Directory>
        </Directory>
    </Fragment>
    <Fragment>
      <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
        <Component Id="ProductComponent" Guid="PUT-GUID-HERE">
          <File Id="openBox" Source="D:open-box.ico" />
          <File Id="wpfFile" Source="D:product.exe" />
          <ProgId Advertise="no" Description="My WPF File" Icon="openBox" Id="xyzFileAssociation_1_0">
            <Extension Id="xyz" ContentType="application/xyz">
              <Verb Id="open" Command="open with my app" Argument="&quot;%1&quot; &quot;1.0.0&quot;" TargetFile="wpfFile"/>
            </Extension>
          </ProgId>
        </Component> 
      </ComponentGroup>
    </Fragment>
</Wix>

产品A v2.0.0 Wix 3.8代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="PUT-GUID-HERE" Name="Product A 2.0" Language="1033" Version="2.0.0.0" Manufacturer="Microsoft" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />
        <Feature Id="ProductFeature" Title="Product A 2.0" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="Product A 2.0" />
            </Directory>
        </Directory>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
             <Component Id="ProductComponent" Guid="PUT-GUID-HERE">
               <File Id="openBox" Source="D:open-box.ico" />
               <File Id="wpfFile" Source="D:product.exe" />
               <ProgId Advertise="no" Description="My WPF File" Icon="openBox" Id="xyzFileAssociation_2_0">
                 <Extension Id="xyz" ContentType="application/xyz">
                   <Verb Id="open" Command="open with my app" Argument="&quot;%1&quot; &quot;2.0.0&quot;" TargetFile="wpfFile"/>
                 </Extension>
               </ProgId>
             </Component> 
        </ComponentGroup>
    </Fragment>
</Wix>

唯一的区别是Progid的ID W.R.T文件关联。

更改文件协会以包含版本编号作为其标题的一部分:xyz1,xyz2等...仅当您希望可以安装产品时才这样做并排。这避免了您的产品之间的干扰。替代方案是通过在卸载上运行的自定义操作注册您的文件协会,该操作将寻找其他安装。如果您问我,很容易笨拙和错误。我的世界中的经验法则:始终选择依靠应用程序和设置设计中的微小变化,以避免具有增加风险的自定义解决方案。如果您可以可靠地避免阅读/编写自定义操作,这始终是可靠性和简单性的正确呼吁。

我更喜欢避免并排安装,因为很少有两个版本的软件可以积极维护。例外可能是向公众发布的主要版本 - 换句话说,版本1、2、3等...我不会与每个构建的新关联搞乱。

如果要并排安装,则必须更改并排安装的组件的所有组件GUID,并使用适当的合并模块或WIX包含的共享文件包含未与之一起安装的共享文件侧面(通常是COM服务器之类的,只能安装一次每机器)。这是为了使参考计数正确工作。也许这个答案值得快速阅读:在Wix中更改我的组件GUID。或者更好的是,依靠链接的帖子中所述的自动生成的GUID。

也许也可以看一下:

  • MSI参考计数:两个产品安装相同的MSIS
  • 如何将WXI文件包括在WXS中?

相关内容

  • 没有找到相关文章

最新更新