我继承了在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
和{ {1}}设置为Package
,"*"
的GUID与先前版本具有相同的值)我可以在MSI的详细日志中看到此UpgradeCode
存在,AUTO_FOUND_DIR
读取特定目录的键值,因此RegistrySearch
删除该目录及其所在的所有组件。
我的问题是:我怎样才能检测升级过程中这个旧属性的使用原因以及如何摆脱它?
其他信息:安装范围为util:RemoveFolderEx
,PerMachine
设置为1.已升级版本的MSI已删除此属性。
答案 0 :(得分:1)
如果不仔细查看完整详细日志以查看正在进行的操作,请记住升级会卸载旧安装的产品。这意味着在升级期间,旧安装产品中的许多逻辑都会发生。因此,您肯定会看到RegistrySearch在旧产品卸载时运行,设置AUTO_FOUND_DIR,您将看到卸载期间运行的RemoveFolder。
因此,如果您所看到的是卸载旧产品的卸载活动,那么您是否真的遇到问题并不清楚。该活动嵌入在已安装的产品中。