.net - 删除文件时小升级失败
问题描述
带有 WIX 安装程序的桌面应用程序。该应用程序的版本 A 包含以下文件:a.dll、b.dll、c.dll。版本 B 包含文件:b.dll、c.dll、d.dll。执行从 A 版本到 B 版本的小升级后,不会替换任何文件。我认为问题出在 A 版本中存在而 B 中不存在的 .dll 文件上。
我们不能在小升级期间删除文件吗?当a.dll附加到B版本时,升级成功。
解决方案
这违反了组件规则。只有主要升级才能移除组件。
https://docs.microsoft.com/en-us/windows/win32/msi/changeing-the-product-code
如果更新满足以下任一条件,则必须更改产品代码:
- 从现有特征中删除组件。
也就是说,有一种解决方法。使组件为 Transitive = True 并为组件提供一个始终评估为 false 的条件。您仍然必须在 MSI 中包含该文件,但如果您愿意,它可以是零字节文件。
这将“刺穿”组件。就 MSI 而言,组件仍然存在并且规则没有被破坏,但组件将从机器中移除,因为它重新评估组件状况并请求将其移除。
推荐阅读
- c++ - While 循环不会与 inFile 一起循环
- laravel - 在显示视频的生产服务器中获取文件未找到异常
- angular - 虚拟滚动无法在 Angular 中使用响应数据-cdk-virtual-scroll-viewport
- c++ - 删除整个二叉树 C++
- python - TypeError:“模块”对象不可调用 - 调用构造函数
- reactjs - react-native 未检测到我的物理设备
- jquery - Bootstrap 4 导航切换按钮不起作用?
- ocaml - 如何编写自定义 ppx 装饰器来重写?
- database - 如何在mysql中的触发器内使用视图
- c++ - 如何在 C++ 中将小写字符串转换为大写字符串