我继承了在 WiX 中创建的 MSI 项目,现在我正在尝试解决一些不幸存在的问题。
有一个记住属性模式,用于查找保存在注册表项中的特定目录:
<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
(非广告)主可执行文件的快捷方式。
有人告诉我,使用 ofutil: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
与以前的版本具有相同的值)我可以在详细日志中看到从AUTO_FOUND_DIR
存在的MSI 中,RegistrySearch
读取具有特定目录的键值,并因此util:RemoveFolderEx
删除该目录和位于该目录的所有组件。
我的问题是:如何检测为什么在升级过程中使用这个旧属性以及如何摆脱它?
附加信息:安装范围为PerMachine
,ALLUSERS
设置为 1。升级版本的 MSI 已删除此属性。