这里有一个问题:是否有一种简单的方法可以防止文件的卸载?当然,我们可以在脚本中添加一个自定义操作来在卸载之前备份文件,然后再添加另一个自定义操作来恢复它,但恕我直言,这个任务似乎有点过分,并且可能会干扰MSI注册过程的其他部分.
编辑:是的,NeverOverwrite =“yes”属性已经在V2中设置,行为就像我描述的那样.
我不认为在V2的组件参数中直接更改某些内容会有所帮助.也许有机会在卸载V1之前以某种方式在自定义操作中修改注册表,以便安装程序服务认为V1中的配置文件是使用Permanent =“yes”安装的?
If this attribute is set to ‘yes’,the
installer does not install or
reinstall the component if a key path
file or a key path registry entry for
the component already exists.
编辑
我刚刚在测试设置中对此进行了测试.起初它没有用,因为我在InstallInitialize序列之前安排了RemoveExistingProducts操作.这会在安装新产品之前删除旧产品,因此无法进行比较.
但是,当我将它设置为InstallFinalize后,它确实有效,即使原始设置没有设置NeverOverwrite,它也会将文件保留在那里.这是我的两个测试示例
版本1.0.0.0
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="35d07bf8-a729-402d-83d6-fdc55799a3d5" Language="1033" Manufacturer="..." Name="test1" UpgradeCode="9773a278-068d-4fac-8241-4a5b7e54f15a" Version="1.0.0.0"> <Package Compressed="no" InstallerVersion="200" /> <Property Id="ALLUSERS" Value="1" /> <Upgrade Id="9773a278-068d-4fac-8241-4a5b7e54f15a"> <UpgradeVersion OnlyDetect="no" Property="REMOVEOLDVERSION" Maximum="1.0.0.0" IncludeMaximum="no" /> <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="1.0.0.0" IncludeMinimum="no" /> </Upgrade> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder" Name="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="test1"> <Component Id="New_Text_Document.txt" Guid="{CCA38D83-A890-4528-B11D-DA2E2DCDED93}" Feature="ProductFeature"> <File Id="New_Text_Document.txt" KeyPath="yes" Source="Harvest\ProgramFilesFolder\INSTALLDIR\New Text Document.txt" /> </Component> </Directory> </Directory> </Directory> <Feature Id="ProductFeature" Level="1" Title="CompletePackage" Description="The complete Product." display="expand" /> <CustomAction Id="NewerFound" Error="A later version of [ProductName] is already installed" /> <InstallExecuteSequence> <Custom Action="NewerFound" After="FindRelatedProducts">NEWERFOUND</Custom> <RemoveExistingProducts After="InstallFinalize" /> </InstallExecuteSequence> <UIRef Id="WixUI_Minimal" /> <Media Id="1" /> <UI /> </Product> </Wix>
版本1.0.1.0
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="1da36626-d760-4c4c-8a5c-3eb3841dbfd5" Language="1033" Manufacturer="..." Name="test1" UpgradeCode="9773a278-068d-4fac-8241-4a5b7e54f15a" Version="1.0.1.0"> <Package Compressed="no" InstallerVersion="200" /> <Property Id="ALLUSERS" Value="1" /> <Upgrade Id="9773a278-068d-4fac-8241-4a5b7e54f15a"> <UpgradeVersion OnlyDetect="no" Property="REMOVEOLDVERSION" Maximum="1.0.1.0" IncludeMaximum="no" /> <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="1.0.1.0" IncludeMinimum="no" /> </Upgrade> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder" Name="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="test1"> <Component Id="New_Text_Document.txt" Guid="{CCA38D83-A890-4528-B11D-DA2E2DCDED93}" Feature="ProductFeature" NeverOverwrite="yes"> <File Id="New_Text_Document.txt" KeyPath="yes" Source="Harvest\ProgramFilesFolder\INSTALLDIR\New Text Document.txt" /> </Component> </Directory> </Directory> </Directory> <Feature Id="ProductFeature" Level="1" Title="CompletePackage" Description="The complete Product." display="expand" /> <CustomAction Id="NewerFound" Error="A later version of [ProductName] is already installed" /> <InstallExecuteSequence> <Custom Action="NewerFound" After="FindRelatedProducts"> NEWERFOUND</Custom> <RemoveExistingProducts After="InstallFinalize" /> </InstallExecuteSequence> <UIRef Id="WixUI_Minimal" /> <Media Id="1" /> <UI /> </Product> </Wix>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。