我需要在我的安装程序找到以前的安装程序时,它会在重新安装之前删除所有内容。到目前为止,我有这段代码:
<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>
但是当我运行安装程序时,我收到此消息:安装了此产品的另一个版本。这种安装无法继续。 (或类似的东西,我的窗户不是英文)。
如何修复?
答案 0 :(得分:1)
如果需要,可以使用升级代码和版本控制系统来执行此操作:
<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号版本控制方案。为了进行四个版本的编辑,我将研究为该软件设计一个bootstrapper(setup.exe)。