我有一个简单的安装程序,我希望能够执行升级和正确卸载,而不必每次手动生成新的ID。
这是我的代码(相关部分(:
<Product Id="*" UpgradeCode="$(var.UpgradeCode)" Name="$(var.ProductName)"
Language="!(loc.Language)" Codepage='1252' Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)">
<Package Id='*' Keywords='Installer' Description="My Installer" Manufacturer='$(var.Manufacturer)'
InstallPrivileges='elevated' InstallScope='perMachine'
InstallerVersion='200' Compressed='yes'/>
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="A later version of [ProductName] is already installed"
AllowSameVersionUpgrades="yes"
AllowDowngrades="no" />
<InstallUISequence>
<Show Dialog="WelcomeDlg" After="CostFinalize" />
</InstallUISequence>
</Product>
问题是,我似乎无法使用相同的代码/安装程序进行升级和卸载。
如果我使用产品Id="*&";,我可以执行升级,但当我尝试卸载时,只有"添加/删除程序"中的条目会被删除。但是,已安装的文件仍保留在程序文件中。
如果我使用产品Id=";某个随机guid";,我可以卸载,但无法再执行升级。
所以我的问题是:
我可以使用通配符Id(即产品Id="*"(执行升级和卸载吗?还是每次都必须手动生成一个新Id
谢谢!
我在WiX安装程序中使用了(产品Id="*"(,它仍然能够执行升级和卸载。我的产品、软件包和主要升级代码看起来与您的几乎相同,所以我认为问题出在其他地方。
你的产品部分有这个来告诉WiX要安装/卸载哪些组件组吗?(参见代码(
<Feature Id="ProductFeature" Title="[ProductName]" Level="1">
<ComponentGroupRef Id="ComponentGroup1" />
<ComponentRef Id="DesktopApplicationShortcut" />
</Feature>
编辑:从那以后,我注意到了另一件可能对你有所帮助的事情。我最近遇到了问题,我的程序在卸载过程中没有删除桌面快捷方式,尽管它过去可以工作。此后,我将Guid从"*"到Guid代码,现在正在将其删除。我认为是程序识别了组件。
<Component Id="DesktopApplicationShortcut" Guid="{Create Guid Code}">