2011-08-25 59 views
1

删除我已经定义了组件的清理产生的(不安装)文件上卸载,但阅读这篇文章维克斯:保留对重大升级,在卸载

<Component Id="C_RemoveOnUninstall" Guid="XXX"> 
    <RemoveFile Id="DeleteGeneratedFile" Name="ProgramGeneratedFile" On="uninstall"/> 
    <Condition>REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE</Condition> 
</Component> 

随着病情以上后进行重大升级触动该文件留下来进行升级和卸载。 如果没有这种情况,升级和uinstall都会删除该文件。

我已经尝试每个On =“install/uninstall/both”的RemoveFile,但它似乎并不重要。已阅读this post,但我希望能够使组件条件正常工作,并避免为此编写自定义操作。

此代码看起来是否正确?任何解决方案或解决?

+0

你试过打标该组件是transitive =是?如果没有这个,我怀疑当你进入维护模式时(即当你作为升级的一部分运行嵌套卸载时),组件条件不会得到重新评估。 –

回答

0

此方法假定RemoveFiles action忽略RemoveFile table中的项目,当属性DirProperty引用的值为null时。属性DirProperty referrers将在卸载期间设置,但不在升级期间设置。

有条件地设置属性:

<SetProperty Id="prop_GeneratedFileDir" Value="[GeneratedFileDir]" After="InstallInitialize" Sequence="execute"> 
    REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE 
</SetProperty> 

定义为RemoveFile表的元素:

<Component Id="C_RemoveOnUninstall" Guid="XXX"> 
    <RemoveFile Id="DeleteGeneratedFile" Property="prop_GeneratedFileDir" Name="ProgramGeneratedFile" On="uninstall"/> 
    <CreateFolder/> 
</Component> 

一些有用的链接: wix-usersRemoveFile TableRemoveFile ElementRemoveFolderEx Element