У нас есть большое приложение С# (.net 2.0), которое использует наш собственный компонент С++ COM и стороннюю библиотеку сканеров отпечатков пальцев, также доступную через COM. Мы столкнулись с проблемой, когда на производстве некоторые события из библиотеки отпечатков пальцев не запускаются в приложение С#, хотя события из нашего собственного компонента С++ COM запускаются и получаются просто отлично.
Используя MSINFO32 для сравнения загруженных модулей в рабочей системе с системами, находящимися в неисправной системе, мы определили, что это было вызвано тем, что STDOLE.DLL не был в GAC и, следовательно, не загружен в неисправный процесс.
Перетаскивание этого файла в вызванные GAC события прекратилось из библиотеки COM отпечатков пальцев.
Так что делает stdole.dll? Он размером 16k, поэтому его не может быть много... это какая-то ссылка на другую библиотеку, такую как STDOLE32? Почему его отсутствие вызывает такое странное поведение?
Как мы распространяем stdole.dll? Это приложение для развертывания XCOPY, и мы не используем GAC. Должны ли мы упаковать его в качестве ресурса и использовать System.EnterpriseServices.Internal.Publish.GacInstall, чтобы обеспечить его в GAC?