MSI 安装程序扩展如何找到另一个应用程序的安装目录?

2023-12-06

我有一个主要应用程序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(使用前将#替换为@)

MSI 安装程序扩展如何找到另一个应用程序的安装目录? 的相关文章

  • WIX 目标文件由 LFN 系统上的两个不同组件安装在 [ProgramFilesFolder] 中:这会破坏组件引用计数

    我正在使用 WIX 通过 TFS MSBuild 生成 msi 破坏构建的错误 不仅仅是警告 是 ICE30 The target file eiycriw9 exe MyApp exe is installed in ProgramFil
  • 生成Mst响应工具

    我正在尝试使用 C 创建一个工具来获取通过单击 msi Windows 安装程序 的对话框生成的属性 我可以通过在 msi 关闭之前读取 property 表来获取最终的 msi 属性 但这包含相当多的不需要的属性 例如目录等 我希望能够做
  • WiX 属性引用另一个属性

    我正在尝试为我的应用程序创建多个快捷方式 通过使用在命令行上传递不同的参数Arguments的属性Shortcut http wix sourceforge net manual wix2 wix xsd shortcut htm元素 我希
  • WiX:数字签名 BootStrapper 项目

    我有一个项目 我为其构建了 WiX msi 文件 我还有一个 WiX 引导程序 exe 文件 用于检查 C 2005 是否存在 如果未找到则安装它 然后安装 msi 软件包 我的项目包括作为 msm 文件的 Crystal Reports
  • wix 安装程序/创建网站并分配新的或现有的 Web 应用程序池

    我尝试使用 wix 安装创建一个新网站 没关系 没有问题 但我无法将新的或现有的网络应用程序池分配给新网站 iis website 标记不包含 WebAppPool 属性 我如何将网络应用程序池分配给网站 你可以在下面看到我的代码 感谢您的
  • Wix 为整个树生成单个组件 id

    我是一个几乎没有 wix 经验的人 我正在努力支持 Windows 以及我负责的组件 我正在尝试为我的产品生成的一组文件创建合并模块 这些文件存在于许多子目录中 我想知道如何为整个树中的所有文件创建一个组件 ID 我不担心小的升级 因为那是
  • 在 Linux 中使用 Python 读取 EXE、MSI 和 ZIP 文件元数据

    我正在编写一个 Python 脚本 将大量 Windows 安装程序索引到数据库中 我想知道如何使用在 Linux 上运行的 Python 从 EXE MSI 和 ZIP 文件中读取元数据信息 公司 产品名称 版本等 Software 我在
  • 如何将 .NET Framework 3.5 和其他先决条件添加到 InstallShield 项目

    我可以在 InstallShield 2009 中创建安装文件 我不知道如何将 NET Framework 3 5 和其他先决条件添加到 InstallShield 项目中 我在 installshield2009 中创建了 install
  • WiX Installer:获取正在升级的产品版本

    在从版本 X 到版本 Y 的主要升级过程中 我需要一个属性 变量来表明版本 X 正在升级 当使用 WiX Installer 构建的安装程序对产品进行主要升级时 是否有办法获取正在升级的版本号 假设您使用 WiX Majorupgrade
  • 如何创建具有有效签名的预配置安装程序(MSI 或 EXE)?

    我们希望用户下载我们的 Windows 软件的预配置安装程序 预配置数据包含基于用户帐户数据的设置 定制将在 Linux 上运行的 Java 服务器中完成 我们需要对这些安装程序进行数字签名 不幸的是 由于安全政策的原因 我们无法在这些服务
  • Wix 安装结束后添加多个复选框

    我的 C 应用程序有一个设置 在设置结束时 我添加了一个建议启动应用程序的复选框 效果很好 但我无法添加第二个复选框来提议启动可选安装程序 有我的代码
  • 如何在 MSBuild 中创建新属性并在 WIX 中引用它

    我们需要创建一个属性来指示我们的软件版本 然后我们想在我们的 WIX 项目中使用它 即在 wxs 文件中引用它 我们不想在 wxs 文件中定义它 因为我们希望 MSBuild 也根据此版本号重命名输出文件 PropertyGroup 中的常
  • 为什么我的应用程序会触发另一个应用程序的安装程序?

    当使用旧版 VB6 应用程序并在该应用程序中打开某些特定表单时 会弹出属于 Microsoft Navision 安装在同一台计算机上 的 Windows Installer 如附图所示 每次都会发生这种情况 但仅限于这台机器 VB6应用程
  • 使用 Powershell 远程安装 .msi

    我已经让他使用这个论坛上存在的代码来跟踪代码 cls computername Get Content C Users C201578 db Documents server txt sourcefile iceopsnas LNT Sof
  • 如何在 WiX 中启动 PowerShell 并正确访问 Windows 注册表?

    Update 有趣的是 如果我运行 32 位 powershell 来运行脚本 它会给我同样的错误 看起来32位powershell无法访问64位注册表树 我尝试使用WixQuietExec64但它给出了同样的错误 我还尝试提供 power
  • 在 Visual Studio 的 InstallShield 中创建 setup.exe

    Please tell me whether it is possible to create a file named setup exe I want to have the end user to a single file inst
  • 纯粹使用 WIX 进行修补

    我正在努力纯粹使用 WIX 创建补丁 我希望有人能指导我正确的方向 我有几百个源文件 我对它们进行加热以创建一个收获文件 然后使用蜡烛和光创建一个包 我需要更改一些配置文件 并使用更改创建第二个包 我使用 Torch 和 Pyro 创建 w
  • Wix\heat.exe 奇怪的输出

    我有一个目录 其中有一个文件 Iesi Collections dll 当我运行以下命令时 heat exe dir D MyDir cg References srd o D Product wxs nologo gg g1 dr INS
  • 如何为所有用户静默安装 NSIS 可执行文件

    我有一个 NSIS 安装程序可执行文件 我想为所有用户静默安装它 我知道我可以通过 S进行静默安装的参数 问题是安装程序的默认选项是仅为当前用户安装 如何从命令行更改此选项 installer exe S NSIS本身只支持 S NCRC
  • Wix 为所有用户/每台机器创建非广告快捷方式

    在 WIX 中 如何在所有用户配置文件中创建非广告快捷方式 到目前为止 我只能通过广告中的快捷方式来完成此任务 我更喜欢非广告的快捷方式 因为您可以转到快捷方式的属性并使用 查找目标 在教程中 我看到使用注册表值作为快捷方式的键路径 问题是

随机推荐

  • 如何在Mac上通过chrome和firefox保存SSL证书?

    本博客介绍了如何在 Chrome 和 Firefox 中保存 SSL 证书 但我无法遵循它 我的操作系统是Mac 我不确定这是否是因为 mac 和 windows 之间的差异 有人可以告诉我如何在 Mac 上保存 SSL 证书吗 https
  • 如何在 python 中显示图片?

    我想知道 python 可以显示图像吗 最简单的方法是使用PIL和图片展示方法 这会在图像上打开一个外部查看器程序
  • iostream 和 No_delay 选项

    我正在尝试使用同一问题的答案来禁用 Nagle 算法 ASIO ip tcp iostream 和 TCP NODELAY boost asio ip tcp iostream socketStream const boost asio i
  • Android VpnService抓包不会抓包

    我已经寻找答案几个小时了 但我无法弄清楚 请帮忙 我想做的是使用Android中的VpnService像应用程序一样抓取网络数据包数据包捕获 我首先使用 google 的 ToyVpn 示例代码并对其进行修改 这样我就不会将数据发送到服务器
  • 如何将项目添加到本地存储

    我正在创建一个带有 添加到收藏夹 按钮的歌曲书应用程序 我有song1 html song2 html 和favorite html 在song1 html中 当单击 添加到收藏夹 按钮时 我正在本地存储中存储该歌曲的链接 这是我的歌曲1
  • 将内容文件过滤到表中

    这是我生成的输入 它显示 Jany 和 Marco 在不同时间的课程版本 on 10 00 the course of jany 1 is course theory nothing course applicaton onehour on
  • '”是什么意思?' aria-label='“错误:未找到对象 ''”是什么意思?'> “错误:未找到对象 ''”是什么意思?

    我收到错误消息 错误 找不到对象 x 或者更复杂的版本 例如 平均值 x 中的错误 在为函数 mean 选择方法时评估参数 x 时出错 错误 找不到对象 x 这是什么意思 该错误意味着 R 找不到错误消息中提到的变量 重现错误的最简单方法是
  • 如何使用pandas中的read_csv将时区感知的日期时间读取为时区天真的本地DatetimeIndex?

    当我使用 pandas read csv 读取具有时区感知日期时间的列 并指定该列作为索引 时 pandas 将其转换为时区 天真的 UTC日期时间索引 Test csv 中的数据 DateTime Temperature 2016 07
  • 如何使用 Selenium IDE 单击指定的 li 来自动完成 ul?

    我正在使用 Selenium IDE 进行一些测试 并尝试使用它从自动完成中选择指定的选项 我的问题是 自动完成功能内置于 ul 和两个 li 可能性是相同的 如何点击指定的li 如何对 Selenium 说 单击第一个li 或 单击li带
  • 管理多个版本的 JDK:无效源发布错误

    我安装了jdk 1 6和1 7 我已将 JAVA HOME 变量更新为 C Program Files Java jdk1 6 0 24 C Program Files Java jdk1 7 0 但是当我尝试运行java代码时 gt ja
  • 如何在android中的AsyncTask中使用进度对话框

    我正在开发一个需要用户登录的应用程序 通过网址登录可以正常工作 但是 当我添加 AsyncTask 来添加进度对话框时 该应用程序不会更改意图 我已经尝试了我所知道的所有可能的方法 但徒劳无功 下面是代码 package com epoli
  • ASP.NET 2.0 到 4.0

    我有一个 ASP NET 2 0 网站 我打算升级到4 0 有什么特别需要注意的事情吗 或者我只是选择 4 0 框架并重新编译 VS 2010 将更新 web config 以反映更改 有一些事情您必须注意 阅读所有更改并在测试时将其放在您
  • 如何在 Visual Studio 2008 中为自定义用户控件提供设计时支持?

    我正在为 NET Compact Framework 创建自定义用户控件 并且希望保留设计时支持 我想在 Visual Studio 2008 中 这不再是以前那样疯狂 几乎不可能完成的任务 我希望有一个简单的教程可以告诉我 这很简单 任何
  • 使用 XStream 将 Java 对象序列化为 XML

    问题是 每次执行 main 方法时 a xml 的旧内容都会丢失并被新内容替换 如何将内容追加到a xml文件中而不丢失之前的信息 import java io FileNotFoundException import java io Pr
  • 使用 Youtube Data API 编辑品牌帐户播放列表

    我有一个 Gmail 帐户 无 google plus 其中包含许多品牌帐户 每个品牌帐户都有自己的 YouTube 频道 发布不同的视频内容 我编写了一个简单的 Google Apps 脚本 用于将视频插入品牌帐户播放列表之一 但这不起作
  • 空手道:多部分文件:读取有效,但传递内容值失败

    我有一个带有多部分请求的端点 该请求将两个文件作为请求参数的一部分 我尝试使用下面的代码片段进行读取并且它有效 但我的用例是从文件中获取内容并将其传递给 value 参数 我可以将内容作为文件传递吗 如果我尝试从目录读取文件 工作代码是 工
  • TeamSpeak:查询已连接客户端数量

    我目前正在使用 TeamSpeak 的 ServerQuery 功能通过 PHP 在我的网站上显示所有频道和连接的用户 现在它看起来像这样 对粗略的用户名 频道标题表示歉意 它的作用是显示频道和用户名 但是 我不希望它这样做 我不想显示已连
  • 在 Windows 上安装 PyGraphViz,Python 2.7 graphviz-2.36

    我已经提到过link 但仍然面临问题 我在 Windows 7 上成功安装了 graphviz 现在我想安装 pygraphviz 我下载了 pygraphviz zip 文件并解压缩 我修改了 setup py 并添加了以下文本 Wind
  • 如何在Python中找到两个日期时间对象之间的时间差?

    如何判断两个时间之间的时差 以分钟为单位 datetime物体 gt gt gt import datetime gt gt gt first time datetime datetime now gt gt gt later time d
  • MSI 安装程序扩展如何找到另一个应用程序的安装目录?

    我有一个主要应用程序TheApp它支持插件 应用程序 A 默认安装在 ProgramFiles TheApp 但黄金所有者希望用户可以自定义它 因此它的位置可能会根据安装时用户的输入而变化 插件通过将其复制到子目录来安装Packages安装