我有一个主要应用程序TheApp
它支持插件。应用程序 A 默认安装在$(ProgramFiles)\TheApp
,但黄金所有者希望用户可以自定义它,因此它的位置可能会根据安装时用户的输入而变化。
插件通过将其复制到子目录来安装Packages
安装目录下。具体来说,不需要为要加载的包设置注册表设置,并且我试图尽可能远离注册表。当然,如果用户在安装时改变了安装目录TheApp
,插件还必须更改其安装位置以匹配。
如何最好地实现这一点?我不擅长使用 WiX 编写 MSI 安装程序,但我的第一次尝试可能是在以下情况下创建一个注册表项:TheApp
安装后保存其安装位置,然后让插件搜索注册表项。这迫使我创建注册表值,这是我尽可能避免的。然而,令我印象深刻的是,安装程序应该能够利用 Windows Installer 数据库来定位TheApp
的安装目录。这将消除对注册表项的需要。
对于如何进行安装程序间通信,特别是安装目录,是否有“最佳实践”?如果两个安装程序都用 WiX 编写,那么通信会是什么样子?
是的,您可以使用 Windows Installer 数据库,并且在某些条件下,无需自定义操作!
标准表和操作支持搜索已安装的组件。因此,如果您的应用程序目录中安装了某个组件(例如,您的应用程序 .exe),并且您提供了固定的 GUID,则您的插件安装程序可以找到它。
由于您在所有项目中都需要“MainComponentGuid”,因此将其提取为define
in an Include
file.
插件创作:
<?include ../MainSetup/MainComponentGuid.wxi?>
<Property Id="MAINDIR">
<ComponentSearch Id="MainComponentSearch" Type="file" Guid="$(var.MainComponentGuid)">
<DirectorySearch Id="MainComponentDirectorySearch" AssignToProperty="yes" Depth="0" />
</ComponentSearch>
</Property>
<CustomAction Id="SetInstallFolder" Directory="INSTALLFOLDER" Value="[MAINDIR]" />
<InstallExecuteSequence>
<Custom Action="SetInstallFolder" After="CostFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
在你的目录结构中,你会做Packages
的孩子INSTALLFOLDER
。您也可以使用MAINDIR
in a LaunchCondition
除非安装了主要产品,否则防止安装插件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)