2009-03-06 68 views
21

直到最近,我們還是很高興地將registration-free COM用於我們的本地和.NET COM組件。然而,我們遇到了一個奇怪的問題,那就是我們的應用程序在Windows XP SP3上隨機崩潰(但不是在Vista上),因爲我們只是將.NET程序集的版本號從發佈候選版本更改爲發佈版本。 (難道你不喜歡墨菲的定律嗎?)是否有人成功使用.NET組件免註冊COM?

經過多人失去工作和磨牙之後,我們發現問題是known bug in sxs.dll,它在檢索有關.NET類的信息時會導致堆損壞。有一個熱修復使問題消失,但熱修復不打算重新分配。

我們有點難以理解,在免註冊的COM實現中存在這樣一個可怕的錯誤。有沒有人在那裏成功地使用免註冊的.NET for .NET組件?你是如何解決這個問題的?

+0

+1重要的問題,我是不知道的!順便說一句,我可以建議你添加標籤「regfreecom」,因爲該標籤更常見的免費註冊表COM問題? – MarkJ 2009-03-17 20:36:33

+1

...實際上我只是自己重新簽了...希望確定 – MarkJ 2009-03-17 22:34:08

回答

9

此問題與SxS如何計算類信息的大小有關。程序集的版本號是此信息的一部分。

由於它與發佈候選版本號一起工作,所以可能您的解決方法是使版本的版本號與RC發行版的長度相同。

如果這不適用於您,則建立請求重新分配修復程序權限的過程。我會邀請微軟客戶支持來追求這條路線。

4

我們對本地和.NET組件都使用免註冊COM。我們決定爲這些組件使用固定的程序集版本號(主要是爲了防止在重複調用具有動態內部版本號的*/*的.NET組件時混亂註冊表)。不理想,但我們有其他方法來確定正在使用給定組件的哪個版本(它們從未單獨進行修補)。

這聽起來確實是一個非常討厭的問題!這篇KB文章幾乎使得它看起來像使用SxS是可選的......據我所知,這是做無reg的COM的唯一方法嗎?