gpt4 book ai didi

wix - MSI 安装程序扩展如何定位另一个应用程序的安装目录?

转载 作者:行者123 更新时间:2023-12-03 23:31:23 26 4
gpt4 key购买 nike

我有一个主应用程序 TheApp支持插件。应用程序 A 默认安装在 $(ProgramFiles)\TheApp ,但金主希望这是用户可定制的,因此它的位置可能会根据用户在安装时的输入而有所不同。

通过将插件复制到子目录 Packages 来安装插件安装目录下。具体来说,不需要为要加载的包设置注册表设置,我正在尝试尽可能地远离注册表。当然,如果用户在安装 TheApp 时更改了安装目录,插件还必须更改其安装位置以匹配。

这是如何最好地完成的?我不擅长用 WiX 编写 MSI 安装程序,但我的第一次尝试可能是在 TheApp 时创建一个注册表项。已安装并保存其安装位置,然后让插件搜索注册表项。这迫使我创建注册表值,这是我尽可能避免的。然而,令我震惊的是安装程序应该能够利用 Windows Installer 数据库来定位 TheApp。的安装目录。这将消除对注册表项的需要。

是否有关于如何进行安装程序间通信的“最佳实践”,特别是安装目录?考虑到两个安装程序都将使用 WiX 编写,通信会是什么样子?

最佳答案

是的,您可以使用 Windows Installer 数据库,并且在某些情况下,无需自定义操作!

标准表和操作支持搜索已安装的组件。因此,如果您的应用程序目录中安装了某个组件(例如,您的应用程序 .exe)并且您提供了固定的 GUID,则您的插件安装程序可以找到它。

由于您在所有项目中都需要“MainComponentGuid”,请将其提取为 defineInclude文件。

插件制作:

<?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的 child .您也可以使用 MAINDIRLaunchCondition除非安装了主要产品,否则防止安装插件。

关于wix - MSI 安装程序扩展如何定位另一个应用程序的安装目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17292834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com