c# - 从 GUID 到完整路径

标签 c# path wix .net-2.0 guid

我正在尝试获取安装位置,以便可以执行升级,我正在使用 WiX 安装程序,但我无法使用 WiX 自己的升级机制,因为它会破坏配置文件并且不执行发生的检查在自定义操作的 UI 中。

我有一个调用 .msi 的 Bootstrap ,我可以轻松获取和设置该 .msi 中的参数。

在这种情况下,在 .msi 运行并破坏所有内容之前,我如何从已知但动态的 GUID 获取其在 Bootstrap 中安装的文件位置。

注意我不能假设配置文件在安装之间保持不变,或者我可以比卸载杀死它更快地获取该文件。

最佳答案

你对升级机制有相当多的控制权,你应该能够在升级过程中做你想做的事情。特别是,我会让新的 MSI 读取配置设置,然后将它们写回配置文件(您的新 MSI 肯定会在旧的配置文件被删除之前运行)。这将使您的安装幂等(理想)。

为了回答您的问题,有多种方法可以满足您的需求。以下是我可能会采取的方法:

  1. 写入 ARPINSTALLLOCATION - 此 old blog entry of mine has details .

  2. 如果您知道旧 MSI 的 ProductCode,请跳到步骤 3。如果您现在不知道 ProductCode,请使用 UpgradeCode MSI 的 (如果您正在进行升级,您就会知道)并使用 ::MsiEnumRelatedProducts()查找您之前安装的 MSI 的 ProductCode

  3. 如果您知道 MSI 的 ProductCode,请调用 ::MsiGetProductInfo()并请求 INSTALLPROPERTY_INSTALLLOCATION 属性。

关于c# - 从 GUID 到完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366535/

相关文章:

c# - 修改 wix 制作的 bundle 二进制文件

c# - 使用 CaSTLe Windsor 在开始新范围时我需要一个对象的新实例

c# - 如何获得列表中属性的乘法?

c# - Linq 中的三元运算符

javascript - 在 JS 中处理生产和开发中的路径/链接

linux - 更改 macOS 主目录名称后 vscode 'code' 命令仅用作 sudo

c# - 从Azure容器和子目录中获取所有blob Uris

java - Intellij Spring 和 Tomcat 部署

wix - 取消 MSI 而不显示 "installation interrupted"对话框

deployment - 如何使用 WiX 3.0 部署注册表项和值?