.NETコンポーネントで登録不要のCOMを正常に使用している人はいますか?

StackOverflow https://stackoverflow.com/questions/617253

質問

最近まで、登録不要のCOM を使用して、ネイティブおよび.NET COMコンポーネント。しかし、.NETアセンブリのバージョン番号を変更してリリース候補からリリースに変更しただけで、Windows XP SP3でアプリケーションがランダムにクラッシュし始めた(ただし、Vistaではクラッシュしなかった)という奇妙な問題に遭遇しました。 (マーフィーの法則が嫌いじゃないですか?)

多くの失われた工数と歯磨きの後、問題は sxsの既知のバグであることがわかりました。 .dll は、.NETクラスに関する情報を取得するときにヒープの破損を引き起こします。問題を解消するホットフィックスがありますが、ホットフィックスは再配布するものではありません。

登録不要のCOM実装には、このような恐ろしいバグが存在することに少し困惑しています。登録不要のCOM for .NETコンポーネントを使用している人はいますか?この問題をどのように回避しましたか?

役に立ちましたか?

解決

この問題は、SxSがクラス情報のサイズを計算する方法に関連しています。アセンブリのバージョン番号はこの情報の一部です。

リリース候補のバージョン番号で動作していたため、おそらく回避策は、リリースのバージョン番号をRCリリースと同じ長さにすることです。

これがうまくいかない場合は、修正プログラムの再配布権を要求する確立されたプロセスがあります。このルートを追求するために、マイクロソフトカスタマーサポートを利用します。

他のヒント

ネイティブコンポーネントと.NETコンポーネントの両方に、登録不要のCOMを使用しています。これらのコンポーネントには、固定のアセンブリバージョン番号を使用することにしました(主に、動的ビルド番号/ *を持つ.NETコンポーネントを繰り返し再起動するときにレジストリが乱雑になるのを防ぐため)。理想的ではありませんが、特定のコンポーネントのどのバージョンが使用されているかを判断する他の方法があります(個別にパッチが適用されることはありません)。

これは非常に厄介な問題のようです。そのKB記事では、SxSの使用はオプションのように思われます...私が知っている限り、それはreg-free COMを行う唯一の方法ですか?

FYI修正プログラムは現在、直接ダウンロード可能です: http:// www.microsoft.com/en-us/download/details.aspx?id=27680

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top