【发布时间】:2015-01-28 23:22:49
【问题描述】:
特别是,我们创建了一个 .msi 安装程序,用于将程序集安装到 GAC,并在 msxml3.dll 上具有内置的 DoRegisterTypeLib 操作。但是(并且不知何故),错误的 msxml3.dll 版本(Microsoft 知道的 8.70.1104.0)仍然存在于某些最终用户的 PC 上。如果 msxml3.dll 是那个坏版本,那么 DoRegisterTypeLib 会失败(错误代码为 11)。我们告诉我们的最终用户“修复”他们的 .NET 安装,然后,一切正常。
再说一遍,这个“修复”有什么作用?它是否更新某些/任何 Microsoft .dll?
即使我们不应该在那个(或任何 .dll)上创建那个 DoRegsiterTypeLib,我仍然真的很想知道“修复 .NET”在幕后做了什么。任何人的任何见解都将不胜感激!
【问题讨论】:
-
它重写了大量的注册表项。其中包括修复任何可能受到安装程序删除错误 DLL 或注册表错误影响的任何问题,这是 Microsoft 每天需要处理的类型。永远不要考虑自己做这件事,你不会做对的。由于依赖于 msxml3,您将自己暴露在如此糟糕的安装程序中,您需要迁移到 msxml6。
-
几乎可以肯定你不应该做那个 DoRegisterTypeLib 调用。除了单独使用(例如)合并模块的潜在问题之外,如果条件不正确,您的自定义操作可能会在产品修复期间运行。如果您注册了一些不正确的 Dll 类型库,那么这只是一团糟,然后 NET 修复修复它,然后您的修复再次运行您的自定义操作。
标签: .net windows-installer msxml3