我想我在某处读过它,但现在找不到源代码,无法确认它:当从MSI安装(主要升级)较新的版本时,如果文件已被修改由安装程序或用户),默认规则是旧文件不会被新版本中的同一个文件替换?MSI主要升级覆盖规则
我想我也观察过我在之前编写的安装程序中的行为,但现在经过一些更改后,似乎它将始终替换旧的已修改配置文件!
产品定义:
<Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Advanced Software Solution" UpgradeCode="$(var.UpgradeCode)">
<Package Id="*" InstallerVersion="200" Description="The web service installer" Compressed="yes"
InstallScope="perMachine"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
组件定义:
<Component Id='WebConfigComp' Guid='GUID'>
<File Id='WebConfigFile' Name='Web.config' Source='$(var.TheWebService.WCF.TargetBinPath)\Web.Distribution.config'
KeyPath='yes'>
</File>
</Component>
InstallExecutesequence
FindRelatedProducts 25
AppSearch 50
LaunchConditions 100
ValidateProductID 700
myScripts_CA 799
CostInitialize 800
FileCost 900
CostFinalize 1000
MigrateFeatureStates 1200
InstallValidate 1400
RemoveExistingProducts 1401
InstallInitialize 1500
BackupCA Installed 1501
ProcessComponents 1600
UnpublishFeatures 1800
SchedSecureObjectsRollback_x64 VersionNT > 400 1801
RemoveFiles 3500
RemoveFolders 3600
CreateFolders 3700
InstallFiles 4000
InstallServices VersionNT 5800
SchedSecureObjects_x64 NOT REMOVE~="ALL" AND VersionNT > 400 5801
ConfigureIIs NOT SKIPCONFIGUREIIS AND VersionNT > 400 5999
RegisterUser 6000
RegisterProduct 6100
PublishFeatures 6300
PublishProduct 6400
InstallFinalize 6600
LunchWCFReadme NOT Installed 6601
更新:我刚刚创建了一个用于测试的新项目,观察到相同的行为(修改后的文件被较新版本的安装程序替换),而不更改默认的InstallExecSequence。这可能意味着即使应用文件版本控制,但实际上并没有实际影响结果,因为Glytzhkof和PhilDW指出,删除旧版本的过早发生时间可能会很短。
我正在使用Wix 3.8,目前的稳定版,我错过了什么?
UPDATE2: 到目前为止,我可以证实,InstallFiles
后移动RemoveExistingProducts
将保留修改的版本文件。但问题是,这似乎与
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallExecute" />
</InstallExecuteSequence>
我加入MajorUpgrade
冲突,错误消息是
错误1重复符号 'WixAction:InstallExecuteSequence/RemoveExistingProducts' 找到。这个 通常意味着一个Id是重复的。检查以确保给定类型(文件,组件,功能)的所有 标识符都是唯一的 。 C:\ TestDev \ MySetupTest \ MySetupTest \ Product.wxs 5 1 MySetupTest
这也不是很有帮助。
最后更新: 挖掘网络的东西了一会儿,找出问题是什么:
默认情况下,MajorUpgrade安排RemoveExistingProducts 后InstallValidate。您可以使用Schedule 属性更改计划。例如,如果你选择后 InstallInitialize安排它,它看起来像下面这样:
<MajorUpgrade
Schedule="afterInstallInitialize"
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit.">
所以包括MajorUpgrade
确实会改变RemoveExistingProducts
顺序,方便,这是一个有用的功能,但对我来说却是意外的。感谢所有的帮助,现在开始对我有意义。毕竟一个美满的结局!
谢谢Glyzhkof,最后通过更改默认的exe序列来完成它的工作。 –
一个问题,增加了 InstallExecuteSequence>',似乎与'MajorUpgrade'元素冲突。当我有两个,它会抱怨'错误找到重复的符号'WixAction:InstallExecuteSequence/RemoveExistingProducts'。这通常意味着Id是重复的。检查以确保给定类型(文件,组件,功能)的所有标识符都是唯一的。 \t C:\ TestDev \ MySetupTest \ MySetupTest \ Product.wxs MySetupTest ' –
我无法在此计算机上进行测试 - 未安装wix。很确定这很容易在Google上找到。重复的符号通常只是同一个唯一标识符的两个实例。 –