我正在尝试获取安装位置,以便可以执行升级,我正在使用 WiX 安装程序,但我无法使用 WiX 自己的升级机制,因为它会破坏配置文件并且不执行发生的检查在自定义操作的 UI 中。
我有一个调用 .msi 的 Bootstrap ,我可以轻松获取和设置该 .msi 中的参数。
在这种情况下,在 .msi 运行并破坏所有内容之前,我如何从已知但动态的 GUID 获取其在 Bootstrap 中安装的文件位置。
注意我不能假设配置文件在安装之间保持不变,或者我可以比卸载杀死它更快地获取该文件。
最佳答案
你对升级机制有相当多的控制权,你应该能够在升级过程中做你想做的事情。特别是,我会让新的 MSI 读取配置设置,然后将它们写回配置文件(您的新 MSI 肯定会在旧的配置文件被删除之前运行)。这将使您的安装幂等(理想)。
为了回答您的问题,有多种方法可以满足您的需求。以下是我可能会采取的方法:
写入 ARPINSTALLLOCATION - 此 old blog entry of mine has details .
如果您知道旧 MSI 的
ProductCode
,请跳到步骤 3。如果您现在不知道ProductCode
,请使用UpgradeCode MSI 的
(如果您正在进行升级,您就会知道)并使用 ::MsiEnumRelatedProducts()查找您之前安装的 MSI 的ProductCode
。如果您知道 MSI 的
ProductCode
,请调用 ::MsiGetProductInfo()并请求INSTALLPROPERTY_INSTALLLOCATION
属性。
关于c# - 从 GUID 到完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366535/