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