0

使用 Wix Toolset v3.11,我为我的应用程序(假设版本 1.1)创建了一个 .msi 文件,其中包含一个以 LocalAppDataFolder 为目标的 Directory 元素,并在其下放置一个 Temp 文件夹。此结构与 DirectoryRef 元素一起使用,以将一些文件放在那里,这些文件可以在 InstallFinalize 上的自定义操作中访问。现在我生成了一个补丁(1.2 版),它在 Temp 文件夹中添加了一些文件。但我希望该文件夹现在位于 TARGETDIR 中。所以我改变了

<Directory Id="LocalAppDataFolder">
  <Directory Id="APPDATA_TEMP" Name="Temp" />
</Directory>

<Directory Id="MY_TEMP_PATH" Name=".">
  <Directory Id="APPDATA_TEMP" Name="Temp" />
</Directory>

在下面

<Directory Id="TARGETDIR" Name="SourceDir">

结构体。为了正确应用补丁,我使用 Orca 打开了注册表中引用的 .msi 文件(在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\...\Products{GUID}\InstallProperties\LocalPackage 下)工具并编辑目录表中的相应值。我还编辑了 CustomActions 表以引用新路径,因为它在那里用作参数。所以,现在当我安装补丁时,它会将所有文件(更改的和新的)放在 LocalAppDataFolder 中,就像初始安装一样。但是,使用正确的参数调用自定义操作。

有没有办法将“基础”msi 更改为针对我的新临时文件夹,或者以某种方式告诉补丁使用新文件夹而不管初始路径如何?

目标是应用补丁而无需先卸载应用程序。

非常感谢任何有关如何实现这一目标的帮助。

4

1 回答 1

0

最后我们找到了解决方案。所以这就是解决我们问题的方法,如果有人遇到过类似的事情:

我们在注册表中的两个位置找到了 LocalAppDataFolder 的实际路径:第一个条目位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders中。第二个是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData...\Components。将文件放入 Temp 文件夹的具有组件 ID 的条目仅包含一个值,即该组件中第一个文件的路径。我们将两个路径都更改为新的临时文件夹。

现在补丁将文件正确地提取到新的临时文件夹中,并且自定义操作可以进一步处理它们。

于 2019-10-22T17:57:09.417 回答