debugging - 安装后是否可以取消标记在 MSI 组件中标记为密钥文件的文件?
问题描述
在某些情况下,我们的应用程序中的文件更改了名称,并且开发人员直到我们的产品安装中断后才告诉我(通常这种情况发生在 VB6 项目破坏二进制兼容性并且开发人员必须更改文件名以避免 DLL Hell )。在这些情况下,通过将新文件拖放到我们应用程序的已部署副本中以查看它是否有效,然后再努力拉起 InstallShield 并使用新文件(大多数情况下,当我在干净的 VM 上进行冒烟测试时会出现此类问题,因此我有一个现成的测试环境)。这里的问题是大多数更改名称的文件都标记为MSI 中文件组件中的密钥文件,
部署应用程序后,是否可以从文件中删除密钥文件状态,以防止 Windows 在文件系统中不存在时触发修复?因为它是 MSI,我认为注册表中某处有一个标志来跟踪关键文件?
解决方案
有几个选项:
您应该在删除之前取消注册要删除的 COM 文件。然后你注册一个新的。请注意,一旦你这样做了,你就不能通过它原来的广告快捷方式启动应用程序(这将使注册像以前一样)。
直接启动二进制文件:最简单的选择是转到文件夹并删除要删除的文件,将新文件放置到位并从 Windows 资源管理器而不是通过快捷方式启动主应用程序 binary.exe。这将绕过大多数自我修复入口点(有一些仍然可以启动)。
非广告快捷方式:您还可以删除应用程序二进制文件的原始快捷方式,然后创建一个非广告的新快捷方式(只是一个常规快捷方式 -
1)
右键单击并按住主应用程序二进制文件,2)
拖放到空白桌面区域和释放按钮,3)
选择“在此处创建新快捷方式”)。在大多数情况下,通过这个新的快捷方式启动您的应用程序不会调用自我修复。无论如何,仍然有几种方法可以开始自我修复(如上所述)。有关这方面的更多信息,请参阅: “自我修复入口点”(可以触发自我修复的事物)。
自我修复:这里是关于自我修复及其目的的概述。该答案中还有很多关于该主题的信息的链接。让我在这里插入最相关的内容:概念解释、寻找现实世界的解决方案和避免在你自己的包中。1)
2)
3)
免注册 COM:有些人将免注册 COM视为旧 VB6 应用程序的选项。这涉及将所有注册表设置保存在清单文件而不是注册表中。实现它似乎并不简单。微软文档。
注销 COM 文件:为了注销 COM 文件:
可以使用regsvr32.exe注销 DLL 和 OCX 文件(疑难解答):
regsvr32.exe /u File.dll
EXE 文件可以通过 /unregserver 取消注册(如果实施)
Binary.exe /unregserver
链接:
- 自修复入口点(什么可以启动自修复)。
- InstallShield 进行自我修复
推荐阅读
- git - How to use git to reproduce the steps of a tutorial
- c# - Add an element in a list by matching with a regex
- python - Selenium upload file to a webpage
- node.js - 尝试使用 node-oracledb 在 Oracle 数据库中将图像插入 BLOB 类型时出错
- avro - avro AVSC (json) 文件数组或模式重用
- ckeditor5 - 在 Sulu 2.2.1 中调整 ckeditor 配置
- java - 使用 Akka-http 解析 CONNECT 请求
- kotlin - 为什么它不让我使用 db.collection 之外的两个变量?
- loops - SPSS Loop:解析n个变量以获取值列表
- docker - WSL2 上的 Docker:卷总是匿名的