独自の C++ COM コンポーネントを使用する大規模な C# (.net 2.0) アプリと、同じく COM 経由でアクセスされるサードパーティの指紋スキャナー ライブラリがあります。本番環境では、独自の C++ COM コンポーネントからのイベントが発生し、正常に受信されたにもかかわらず、フィンガープリント ライブラリからの一部のイベントが C# アプリに発生しないという問題が発生しました。
MSINFO32 を使用して、動作中のシステムにロードされているモジュールと障害が発生しているシステムのモジュールを比較すると、STDOLE.DLL が GAC になく、障害のあるプロセスにロードされていないことが原因であることがわかりました。
このファイルを GAC にドラッグすると、フィンガープリント COM ライブラリからイベントが正常に返されました。
では、stdole.dll は何をするのでしょうか? サイズは 16k なので、それほど多くはありません... STDOLE32 のような別のライブラリへの何らかのリンクですか? その不在はなぜそのような奇妙な行動を引き起こすのでしょうか?
stdole.dll の配布方法 これは XCOPY デプロイ アプリであり、GAC は使用しません。それをリソースとしてパッケージ化し、System.EnterpriseServices.Internal.Publish.GacInstall を使用して GAC にあることを確認する必要がありますか?