WiX XmlFile安装时修改是否卸载回滚及Permanent属性用法
1 Permanent="yes"的含义
你对该属性的理解完全正确:在WiX 3.11.2版本中,Permanent="yes"就是指定卸载时不会移除该XmlFile元素在安装阶段施加的修改。默认值为no,即卸载时会按照Sequence属性的逆序自动回滚对应修改,这也和FireGiant教程中的表述完全一致。
你看到的两段矛盾表述,是因为Stein引用的内容来自WiX更早的版本,当时XmlFile确实不支持卸载回滚,该特性是后续3.x版本迭代中补充的。
2 需求实现方案
你需要的「安装时部署XML文件、修改文件、卸载时直接删除整个文件」的需求,不需要额外调整XmlFile的属性,按常规逻辑编写组件即可:
你部署的XML文件属于当前安装包独占的资源,只要承载该文件的Component没有设置Permanent="yes",卸载时MSI会直接删除整个XML文件,完全不需要考虑XmlFile的修改要不要回滚的问题——不管修改有没有被回滚,整个文件都会被清理。
示例代码如下:
<Component Id='Settings' Guid='替换为你自己的GUID'> <!-- 部署XML文件,默认卸载时会被删除 --> <File Id='XmlSettings' Name='settings.xml' DiskId='1' Source='settings.xml' Vital='yes' /> <!-- 这里的XmlFile不需要设置Permanent属性,默认即可,哪怕设置为yes也不影响最终文件删除 --> <util:XmlFile Id='XmlSettings1' File='[INSTALLDIR]settings.xml' Action='createElement' Name='add' ElementPath='//settings' Sequence='1' /> <!-- 其余XmlFile修改逻辑按你的需求补充 --> </Component>
如果要进一步避免极端情况的问题,也可以主动给所有XmlFile元素加上Permanent="yes",跳过无意义的修改回滚步骤,卸载时直接删除文件即可,效率更高。
内容的提问来源于stack exchange,提问作者Katie Kilian
相关产品推荐
相关产品推荐

