【发布时间】:2017-08-18 17:08:50
【问题描述】:
我继承了在 WiX 中创建的 MSI 项目,现在我正在尝试解决一些不幸存在的问题。
有一个remember property pattern,用于查找注册表项中保存的特定目录:
<Property Id="AUTO_FOUND_DIR" Secure="yes" Admin="yes">
<RegistrySearch Id="regsrch_AUTO_FOUND_DIR"
Root="HKCU"
Key="$(var.RegPath)"
Name="$(var.SpecificKey)"
Type="raw"
/>
</Property>
然后将SpecificKey 值保存在AUTO_FOUND_DIR 属性中。
然后黑魔法出现了。一个单独的组件持有(除其他外)一个位于ProgramMenuFolder(非广告)到主可执行文件的快捷方式。
有人告诉我,使用 util:RemoveFolderEx 是解决旧问题的一种解决方法,即此快捷方式在卸载过程中被孤立并且未被删除:
<Feature>
<DirectoryRef Id="ProgramMenuDir">
<Component Id="cmp_ProgramMenuDir" Guid="{0E8BD13A-GUID-IS-HERE-6E5092ECA9EF}">
<CreateFolder />
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryKey Id='reg_SpecificKeyID' Root='HKCU' Key='$(var.RegPath)' ForceCreateOnInstall="yes">
<RegistryValue Type='string' Name='$(var.SpecificKey)' Value='[ProgramMenuDir]'/>
</RegistryKey>
<!-- other content: shortcut to ProgramMenuFolder and other stuff -->
<util:RemoveFolderEx Id="rm_dirID" On="install" Property="AUTO_FOUND_DIR"/>
</Component>
</DirectoryRef>
</Feature>
问题是:我不需要这种解决方法(以及 AUTO_FOUND_DIR 属性的使用。我已经删除了该代码,但在升级期间(主要,Product 和 Package GUID 设置为 "*" ,UpgradeCode 与以前的版本具有相同的值)我可以在来自 MSI 的详细日志中看到这个AUTO_FOUND_DIR 存在,RegistrySearch 读取具有特定目录的键值,因此util:RemoveFolderEx 删除了该目录并那里的所有组件。
我的问题是:如何检测为什么在升级过程中使用了这个旧属性以及如何摆脱它?
附加信息:安装范围为PerMachine,ALLUSERS 设置为 1。升级版本的 MSI 已删除此属性。
【问题讨论】:
标签: wix windows-installer major-upgrade