Ошибка автоматизации при вызове компонента COM+ в Windows 8.1

У меня есть устаревшее приложение VB6, которое выполняет вызовы компонента COM+, написанного на C# (для.NET Framework v2), для связи по TCP/IP.

Этот режим работы работал в различных операционных системах и был успешно развернут в средах Windows XP, Vista и 7.

Я только начал тестировать программное обеспечение в Windows 8.1, и когда приложение VB6 пытается выполнить вызовы компонента COM+, оно сообщает об "ошибке автоматизации". Подобные ошибки в прошлом возникали из-за сбоя регистрации COM+ и быстро исправляются путем ручной регистрации компонента COM+ с помощью regsvcs.exe,

Программное обеспечение устанавливается MSI, который также запускает скрипт, который вызывает regsvcs.exe для регистрации компонента COM+. Для Win 8.1 мне пришлось сменить путь regsvcs.exe от:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

Для того, чтобы:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

Я протестировал этот установщик на Win 7 и Win 8.1. На Win 7 звонки COM+ работают нормально. Проблема, с которой я сталкиваюсь в Win 8.1, заключается в том, что компонент COM+, похоже, зарегистрирован правильно, однако вызовы компонента по-прежнему не выполняются. В Component Services все выглядит отлично, и приложение COM+ запускается, когда выполняется вызов VB6, но возвращается ошибка автоматизации и сбой вызова.

Примечание: среды Win 7 и 8.1, на которых я тестирую, являются 64-битными.

Кажется, что-то, связанное с компонентными службами и приложениями COM+, изменилось между Windows 7 и Windows 8.1, но я не могу найти решение.

Кто-нибудь сталкивался с чем-то похожим или указывал на проблему?

2 ответа

После многих часов проб разных вещей я нашел решение. Мне пришлось включить.NET Framework 3.5 (включая Framework 2) и изменить путь к regsvcs.exe вернуться к C:\Windows\Microsoft.NET\Framework\v2.0.50727,

Теперь после переустановки звонки на компонент COM+ работают. Все еще не уверены, в чем разница между использованием этой утилиты из папки v2 и папки v4.

Кроме того, пытаясь включить.NET Framework 3.5 с помощью функции "Включение и выключение компонентов Windows" в "Программы и компоненты", я продолжал получать сообщение об ошибке 0x800F0906,

В итоге мне пришлось установить его из смонтированного ISO-образа Windows 8.1 с помощью следующей команды:

dism /online /Enable-Feature /FeatureName:NetFX3 /All /Source:E:\Sources\SxS /LimitAccess

Где E:\ - буква диска смонтированного ISO.

Процесс, которому я следовал, был описан здесь: https://yellowduckguy.wordpress.com/2012/10/19/windows-8-fix-enable-feature-net-3-5-error-0x800f0906/

Я столкнулся с точно такой же проблемой, как и вы, я сделал.NET COM Interop DLL для звонков с Vb6 . Мое программное обеспечение работает на всех версиях Windows, за исключением одного дня, когда я обнаружил, что на каком-то компьютере с Windows 8 возникают проблемы при запуске моего программного обеспечения. Ошибка, которую я получил, Ошибка Автоматизации.

После исследования я обнаружил, что если мы используем версию.NET v4.0.30319 в Windows 8, чтобы зарегистрировать нашу сборку.NET 2.0-3.5. Это может не сработать, я не знаю почему, но может быть совместимость с другой версией.NET или новая ошибка от Microsoft. (Я знаю, что.NET 4.0 может запускать сборку.NET 2.0, но не знаю, почему есть некоторые исключения в Windows 8).

Поэтому лучшее решение для меня сейчас:

1) Включите.NET 3.5 в Windows 8 (это решение отнимает много времени, потому что вам нужно будет поставить Windows 8.1 ISO в вашем установщике)

2) Создайте две целевые версии.NET Framework для вашего приложения. Поэтому, если ваш клиент использует Windows 8, установщик установит версию приложения.NET 4.0. Если ниже окна 8, установите версию.NET 3.5.

Другие вопросы по тегам