我正在使用WiX创建一个安装程序(我必须说我真的不喜欢它,但这不是WiX的错误和更多的MSI。而且我绝对赞扬Rob Mensching在这里和其他地方的帮助。)
是否可以创建一个组件:
我开始认为这是不可能的。将组件标记为永久性意味着组件不会被卸载,这意味着它不可更新(至少不通过主要升级;补丁怎么样?)。
标记组件NeverOverwrite不会阻止它被卸载,即使用户更改了未版本化的keyFile(因此删除了用户的工作)。
即使他们是否定的,我也会表达所有明确的答案。
答案 0 :(得分:0)
我没有尝试过,但您可能可以使用自定义操作来执行此操作。有关示例,请参阅From MSI to WiX, Part 5。 Custom Action Type 38
示例包括:
<Directory Id="INSTALLDIR" Name="Minimal" LongName="MinimalInstallation">
<Component Id="Component1"
Guid="{A77C5B06-132D-4884-8E17-EA10A83C812D}">
<File Id="ReadMe" DiskId="1" Name="Readme.txt" Source="Readme.txt" Vital="yes" KeyPath="yes" />
<!--RemoveFile Id="RemoveCopy" Name="ReadMe2.txt" On="uninstall" /-->
</Component>
</Directory>
....
<CustomAction Id="CopyReadMe"
Script="vbscript">
<![CDATA[
Set fso = CreateObject("Scripting.FileSystemObject")
path = Session.Property("INSTALLDIR")
fso.CopyFile path & "ReadMe.txt", path & "ReadMe2.txt"
]]>
</CustomAction>
<InstallExecuteSequence>
<Custom Action="CopyReadMe" After="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>
这里安装了Readme.txt,并使用复制到ReadMe2.txt的vbscript自定义操作。如果您在vbscript中执行某些版本和/或修改日期检查,则可以自行控制ReadMe2.txt是否被覆盖。如果没有RemoveFile,wix将不会卸载ReadMe2.txt,因为它不知道该文件是否存在。
对于升级,可能需要使用不同的自定义操作在安装之前将ReadMe2.txt复制回Readme.txt。这样你可以让wix处理普通的文件版本控制规则,以确定是否可以更新Readme.txt。然后,您不必将版本处理添加到vbscript。