是否有人成功使用免费注册COM与.NET组件?

时间:2009-03-06 00:10:21

标签: .net com regfreecom winsxs sxs

直到最近,我们才开心地使用registration-free COM作为我们的原生和.NET COM组件。然而,我们遇到了一个奇怪的问题,我们的应用程序开始在Windows XP SP3上随机崩溃(但不是在vista上)之后我们只更改了.NET程序集的版本号以从候选版本发布到发布版本。 (难道你不是只讨厌墨菲定律吗?)

经过多次失去的人工和磨牙之后,我们发现问题是known bug in sxs.dll,在检索有关.NET类的信息时会导致堆损坏。有一个热修复方法会使问题消失,但热修复不会被重新分发。

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

3 个答案:

答案 0 :(得分:9)

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

由于它使用的是候选版本号,因此可能的解决方法是使版本的版本号与RC版本的版本号相同。

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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