我正在开发具有许多旧组件的应用程序。我们在使用旧的WISE安装程序创建升级补丁时遇到了问题。我正在研究使用WiX为应用程序构建更新MSI的可能性,该更新MSI仅包含我们更改要构建的文件。我正在使用这样的文件:
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='My Product' Id='AGUID-xxx-xxx-xxx-xxx' UpgradeCode='AGUID-xxx-xxx-xxx-xxx'
Language='1033' Codepage='1252' Version='5.60.0' Manufacturer='Me'>
<Package Id='*' Keywords='Installer' Description="My Upgrade Installer"
Comments='This is an awesome installer because I wrote it' Manufacturer='Me'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Upgrade Id='AGUID-xxx-xxx-xxx-xxx'>
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
Minimum='5.51.1' IncludeMinimum='yes' />
</Upgrade>
<Property Id='BINDIR'>
<RegistrySearch Id='TheRegEntry' Type='raw' Root='HKLM' Key='Software\Me\MyApp\Startup' Name='Location' />
</Property>
<CustomAction Id='NoDowngrade' Error='A later version of [ProductName] is already installed.' />
<Media Id='1' Cabinet='My.cab' EmbedCab='yes' DiskPrompt="You should not see this disk prompt" />
<Property Id='DiskPrompt' Value="You should not see this disk prompt" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='BINDIR' Name='Bin'>
<Component Id='MyExeComponent' Guid='*'>
<File Id='MyExeFile' Name='something.exe' DiskId='1' Source='<local path>\something.exe' KeyPath='yes'></File>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id='MainProgram' Title='AnExe' Description='This is just one file of many' Level='1'>
<ComponentRef Id='MyExeFile' />
</Feature>
<InstallExecuteSequence>
<Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
</InstallExecuteSequence>
</Product>
</Wix>
这基本上是WiX文档中的升级示例,其中包含注册表查找以获取安装位置,然后只有一个EXE文件副本。
实际的安装程序在MyExeComponent中有多个文件,我想更新这些文件,但是我仅指定更改的文件。我想我真正要问的是仅“声明”完整安装的一部分的安装程序实际上可以更新现有安装。
它将在目标系统上构建并运行,没有错误,但是我要更新的文件没有更新,并且程序从“控制面板”中的已安装程序列表中消失了。
我们的旧版更新补丁过程涉及从多个MSI创建一个MSP,然后运行创建EXE文件的第二步。如果无法使以上功能起作用,我可以尝试将WiX生成的MSP输入该过程。