微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

安装后是否可以取消标记为 MSI 组件中的密钥文件的文件?

如何解决安装后是否可以取消标记为 MSI 组件中的密钥文件的文件?

在某些情况下,我们的应用程序中的文件更改了名称,而开发人员直到我们的产品安装中断后才会告诉我(通常这种情况发生在 VB6 项目破坏二进制兼容性并且开发人员必须将文件名更改为避免 DLL 地狱)。在这些情况下,通过将新文件放入已部署的应用程序副本中来查看它是否有效,然后再努力拉起 InstallShield 并使用新文件(大多数情况下,当我在干净的 VM 上进行冒烟测试时会出现此类问题,因此我有一个现成的测试环境)。这里的问题是大多数名称更改的文件都被标记为MSI 中文件组件中的一个关键文件,因此当我删除文件并运行我们的应用程序时,它会触发修复,Windows 将其放回并否定测试的值。

部署应用程序后,是否可以从文件删除密钥文件状态以防止 Windows 触发修复(如果文件系统中不存在该文件)?因为它是 MSI,所以我认为注册表中的某处有一个标志来跟踪密钥文件

解决方法

有几个选项:

您应该在删除之前取消注册要删除的 COM 文件。然后注册新的。请注意,一旦完成注册,您绝不能通过其原始宣传的快捷方式启动该应用程序(这将使注册恢复原状)。

  1. 直接启动二进制文件:最简单的方法是转到文件夹并删除要删除的文件,将新文件放置到位并启动来自 Windows 资源管理器的主应用程序 binary.exe 而不是通过快捷方式。这将绕过大多数 self-repair entry points(有一些仍然可以启动)。

  2. 非广告快捷方式:您还可以删除应用程序二进制文件的原始快捷方式,然后创建一个新的非广告快捷方式(只是一个常规快捷方式 - 1) 右键单击​​并按住主应用程序二进制文件,2) 拖放到空白桌面区域并释放按钮,3) 选择“在此处创建新快捷方式”)。在大多数情况下,通过这个新的快捷方式启动您的应用程序不会调用自我修复。无论如何,仍有几种方法可以启动自我修复(如上所述)。有关更多信息,请参阅:"Self-repair entry points"(可以触发自我修复的事物)。


自我修复Here is an overview on self-repair and its purpose。在该答案中还有指向有关该主题的大量信息的进一步链接。让我在此处内嵌最相关的:1) Explanation of the concept2) Finding real-world solutions{{ 1}} Avoiding in your own package

免注册 COM:有些人将 registrationless COM 视为旧 VB6 应用程序的选项。这涉及将所有注册表设置保存在清单文件而不是注册表中。实现它似乎并不容易。 Microsoft Docs


取消注册 COM 文件:为了取消注册 COM 文件:

  1. DLL 和 OCX 文件可以使用 regsvr32.exe (troubleshooting) 取消注册:

    3)
  2. EXE 文件可以通过 /unregserver(如果已实现)取消注册

    regsvr32.exe /u File.dll
    

链接:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。