MSI 在升级安装时删除了所需的程序集,但在修复时将其替换
-
19-09-2019 - |
题
我遇到了一些与 MSI 安装升级相关的奇怪问题,也许有人可以帮助我:
我有两个 MSI,一个是原始的,一个是升级的:
- 微星1.0版
- 包含要安装到 GAC 的 .NET 程序集 foo.dll
- foo.dll 在 MSI 文件系统 gui 中属于“Assembly”类型(而不是“Output”)。
- 微星2.0版
- 还包含 foo.dll(相同版本),以及一堆附加程序集。
- 我希望 MSI 2.0 完全取代 1.0,因此我将 RemovePerviousVersion 设置为 False。
现在分两种安装场景:
我运行的是 MSI 1.0。Foo.dll 已正确安装到 GAC。然后我运行 MSI 2.0 并 Foo.dll 似乎已从 GAC 中删除, ,但还有附加组件。我不知道有什么办法。但是,如果我转到“添加/删除程序”并单击“修复”,则会添加 Foo.dll。
MSI 1.0 从未安装,我运行 MSI 2.0。Foo.dll(和附加程序集) 是 在那里,正如预期的那样。
有什么想法为什么 foo.dll 在升级过程中被删除吗?提前致谢!
-肯
更新 经过一些刷新/重建后,它现在似乎可以工作了。但是,现在当我卸载 MSI 时,即使其属性“Permanent”设置为 false,它也不会删除 foo.dll。问题不大,但很高兴知道发生了什么。
解决方案
为了纠正这个奇怪的现象,我最终做了以下事情:
- 安装 Orca.exe,它是 Windows SDK 的一部分。
- 通过 Orca 在构建后将 REINSTALLMODE=amus 添加到 Propery 表中。
这解决了我眼前的问题并纠正了我遇到的安装/卸载问题。唯一的问题是这是一个手动过程。下一步,以某种方式使其成为自动构建后事件的一部分。
不隶属于 StackOverflow