У меня проблемы с запуском 32-разрядного приложения .NET в Windows 7 x64, которое, кажется, сосредоточено вокруг сторонней библиотеки COM. Вот настройки:
Наше приложение было написано для 32-битной Windows XP, но мы пытались настроить его так, чтобы оно нормально работало на 64-битной Windows. Он основан на P / Invoke и COM Interop с несколькими 32-битными сторонними библиотеками. Получение 64-битных версий этих библиотек невозможно.
Данная библиотека представляет собой оболочку COM, предоставляемую поставщиком для своей библиотеки на основе C (не поддерживается в Windows XP). С этим интерфейсом гораздо проще работать из .NET. Однако в 64-битной Windows 7 библиотека COM, кажется, работает со сбоями во время своей инициализации. Фреймворк имеет функцию с именем Init (), которая возвращается с успехом, но впоследствии она не ведет себя «должным образом».
Фреймворк должен искать информацию о конфигурации в реестре во время инициализации (имена созданных нами пользовательских библиотек DLL и другие метаданные). Используя Sysinternals Process Monitor, я вижу, что он запрашивает информацию в разделе о 32-битной совместимости реестра, но, похоже, он не использует , что находит.
Я могу воспроизвести это поведение, взаимодействуя с интерфейсом COM из PowerShell (x86), поэтому я не думаю, что у меня неправильная настройка в Visual Studio.
Вот кикер, хотя. Если я запускаю наше приложение на платформе x64 из Visual Studio с включенным процессом хостинга, оно работает каждый раз. Если я отключаю процесс хостинга или запускаю извне Visual Studio, он каждый раз завершается сбоем.
Есть какие-нибудь идеи о размещенной среде, которая позволяет этому взаимодействию COM преуспеть?
ОБНОВЛЕНИЕ: приложение определенно работает в 32-битном режиме. Visual Studio настроена на сборку для x86, и я вижу * 32 после его имени в диспетчере задач. Process Monitor также показывает используемые библиотеки WOW64.