我有一个合并模块,该模块搜索某些注册表位置以读取值并保存到属性。这是代码段:
<Fragment Id="RegSearch">
<Property Id="HOST_APP_PATH" >
<RegistrySearch Id="HOST_App"
Root="HKLM"
Key="SOFTWAREMicrosoftWindowsCurrentVersionApp PathsHOST.exe"
Name="Path"
Type="raw"
/>
</Property>
<Property Id="HOST_ROOT_PATH" >
<RegistrySearch Id="HOST_Root"
Root="HKLM"
Key="SOFTWAREHostApplicationInstallation Info"
Name="HOST_Root"
Type="raw"
/>
</Property>
Windows安装程序将此搜索放在AppSearch自定义操作中。
问题: appSearch很早地执行此搜索,在主机安装程序的WritereGistryValues之前,它不会定义此搜索的任何值和属性,因为从未写过搜索的注册表那里。
问题1:我们可以在主机安装程序的WritereGistryvalues之后从合并模块重新安排此注册表搜索?
问题2:在主机安装程序执行WritereGistryValues之后,还有其他搜索注册表的方法吗?大概有一些自定义操作?
AppSearch是Windows安装程序提供的标准操作,设计旨在很早运行。这是因为启动条件标准操作经常使用它来决定安装是否可以继续。这对于确定是否应安装功能和组件也很有用。
MSI是一个非常有用的框架。我怀疑您当前的设计与MSI不兼容。
主机安装程序是相同的MSI还是其他MSI?假设是一样的,为什么您不能仅将数据放在某些MSI属性中并使用这些属性写入注册表?那么,您就不需要重新读取值,因为您已经在属性中拥有它们。
将这些属性写入注册表后您需要什么?通常,将它们写入注册表将是最终游戏。我不确定您接下来还在做什么。
如果host.msi是另一种MSI,为什么要让一个MSI安装另一个MSI?那不是MSI设计。在这种情况下,您需要一个引导程序。主机MSI将首先运行,然后将此MSI运行。但是,即使如此,第二个MSI将取决于第一个MSI设置的属性,这有点奇怪。我认为Bootstrapper UI和应用程序将收集此信息并将其作为安全的自定义公共属性传递给两个MSI。
回答问题1:没有合并模块只能将动作插入序列。它无法重新安排行动。2:您必须使用自定义操作。但是正如我上面说的那样,这感觉像是我走错的道路。