1

我需要当我的安装程序找到以前的安装程序时,它会在重新安装之前将其全部删除。到目前为止,我有这个代码:

<Product Id="GUID1" Name="MyName" Language="1033"
    Version="1.0.0.0" Manufacturer="MyManufacturer" UpgradeCode="GUID2">
  <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

  <InstallExecuteSequence>
    <RemoveExistingProducts Before="InstallInitialize" />
  </InstallExecuteSequence>

  <Feature Id="ProductFeature" Title="MyTitle" Level="1">
    <ComponentGroupRef Id="MyFeatures" />
  </Feature>
</Product>

但是当我运行安装程序时,我收到此消息:安装了此产品的另一个版本。此安装无法继续。(或类似的东西,我的窗户不是英文的)。

如何解决?

4

1 回答 1

2

如果需要,您可以使用升级代码和版本控制系统来执行此操作:

    <Product Id="*"
         Name="MyApp"
         Language="1033"
         Version="1.0.0"
         Manufacturer="Me"
         UpgradeCode="bf35a656-3e28-4f40-9ebd-566174c9c948">

         <MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of MyApp is already installed. Setup will now exit."/>

         <!-- other stuff -->
    </Product>

关键是您始终将产品代码保留为“*”和“UpgradeCode”常量。这将使得当您将版本更改为 1.0.1 时,它将删除所有以前的版本。但是,如果用户在已经拥有较新版本的情况下尝试安装较旧版本,则不会让他/她(除非他们先手动卸载)。

免责声明:相同版本不会触发更新。同样更改第 4 个数字 (1.0.0.*) 也不会触发更新。它适用于 3 号版本控制方案。为了有四个数字版本,我会考虑为该软件设计一个引导程序(setup.exe)。

于 2013-07-25T21:09:04.303 回答