Ошибка автоматизации при вызове компонента 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.