直到最近,我们还在为我们的原生和.NET COM组件愉快地使用registration-free COM。然而,我们遇到了一个奇怪的问题,我们的应用程序在windows XP SP3 (而不是vista)上开始随机崩溃,因为我们只更改了.NET程序集的版本号以从一个发布候选版本转移到另一个发布版本。(你不就是讨厌墨菲定律吗?)
经过许多人的努力和磨练,我们发现这个问题是一个在检索.NET类的信息时导致堆损坏的known bug in sxs.dll。有一个热修复程序可以使问题消失,但热修复程序不打算重新分发。
我们有点被这个免注册的COM实现中存在如此可怕的bug难住了。有没有人成功地为.NET组件使用了免注册的COM?你是如何解决这个问题的?
发布于 2009-04-19 10:45:39
这个问题与SxS如何计算类信息的大小有关。程序集的版本号是此信息的一部分。
由于它使用的是发布候选版本号,因此您的变通方法可能是使发布的版本号与RC发布的长度相同。
如果这对您不起作用,有一个已建立的过程来请求热修复程序的再发行权。我会联系微软的客户支持,以实现这一目标。
发布于 2009-03-08 05:32:23
我们对本机组件和.NET组件都使用免注册的COM。我们决定对这些组件使用固定的程序集版本号(主要是为了防止在重复使用具有动态内部版本号/*的.NET组件时弄乱注册表)。不是很理想,但我们有其他方法来确定正在使用的给定组件的版本(它们永远不会单独打补丁)。
这听起来确实是一个非常糟糕的问题!那篇知识库文章几乎让人觉得使用SxS是可选的……据我所知,这是做无注册表COM的唯一方法?
发布于 2012-07-20 14:09:42
仅供参考,修复程序现在可以直接下载:http://www.microsoft.com/en-us/download/details.aspx?id=27680
https://stackoverflow.com/questions/617253
复制相似问题