21

直到最近,我们还在为我们的本机和 .NET COM 组件愉快地使用免注册COM。但是,我们遇到了一个奇怪的问题,我们的应用程序在 Windows XP SP3 上开始随机崩溃(但不是在 vista 上),因为我们只更改了 .NET 程序集的版本号以从候选发布版移动到发布版。(你不只是讨厌墨菲定律吗?)

经过许多人日和磨牙,我们发现这个问题是sxs.dll中的一个已知错误,它在检索有关 .NET 类的信息时会导致堆损坏。有一个热修复程序可以使问题消失,但热修复程序并不打算重新分发。

我们有点难过,免注册的 COM 实现中存在如此可怕的错误。有没有人成功地为 .NET 组件使用免注册 COM?你是如何解决这个问题的?

4

3 回答 3

9

这个问题与 SxS 如何计算类信息的大小有关。程序集的版本号是此信息的一部分。

由于它使用的是候选发布版本号,也许您的解决方法是使发布的版本号与 RC 发布的长度相同。

如果这对您不起作用,则有一个已建立的流程来请求修补程序的重新分发权限。我会聘请 Microsoft 客户支持来追求这条路线。

于 2009-04-19T10:45:38.787 回答
4

我们对本机和 .NET 组件都使用免注册 COM。我们决定为这些组件使用固定的程序集版本号(主要是为了防止在重复重新填充具有动态内部版本号/* 的 .NET 组件时使注册表混乱)。不理想,但我们有其他方法来确定正在使用的给定组件的哪个版本(它们从不单独修补)。

这听起来确实是一个非常讨厌的问题!那篇知识库文章几乎让人觉得使用 SxS 是可选的……据我所知,这是实现无注册 COM 的唯一方法?

于 2009-03-08T05:32:23.417 回答
1

仅供参考,现在可以直接下载修补程序:http: //www.microsoft.com/en-us/download/details.aspx?id=27680

于 2012-07-20T06:09:41.760 回答