2015-01-28 1 views
0

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

Этот режим работы работал в различных операционных системах и был успешно развернут в среде 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 

To:

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.

Я закончил тем, что установить его из установленного для Windows 8.1 ISO с помощью следующей команды:

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/

0

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

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

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

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

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