Reg Free Com с VB6 на Windows 7

У меня есть код .NET, который я использую из кода VB6. Я всегда разрабатывал это на машине XP, создав файл VB6.exe.manifest, в котором перечислены зависимые сборки .NET.

Например, скажем, что мои 2 сборки .NET – это Some.Assembly.A.ll и Some.Assembly.B.dll, вот что выглядит VB6.EXE.manifest (я использую версию = 1.1.0.0 ниже, потому что это версия Я установил .NET AssemblyVersion в AssemblyInfo.cs):

              

Затем, вместе с DLL в том же каталоге, у меня есть сборки и их собственные файлы манифеста. Вот пример «Some.Assembly.A.dll.manifest»:

        ?        

Я также запускаю tlbexp в связанных DLL-файлах для создания файлов TLB, и это то, что я упоминаю в своем файле проекта VB6.

Я хочу перейти на машину Windows 7 64 BIT. Используя те же методы, когда я попадаю в код VB6, который создает экземпляр объекта .NET на машине WIN7, я получаю

«Компонент ActiveX не может создать объект».

В XP это удается. Если я намеренно ошибочно нахожусь в зависимой сборке в VB6.EXE.manifest – на XP я получаю

«Это приложение не удалось запустить, потому что неправильная конфигурация приложения. Повторная установка приложения может решить эту проблему».

На WIN7 VB6 просто загружается. Это похоже на то, что он игнорирует манифест на WIN7, поэтому я не могу загрузить свой .NET-объект, используя REG FREE-методы на WIN7. Если я regasm DLL, все будет работать.
Любые идеи о том, как заставить VB6 работать с reg free com на WIN7 (64 BIT)?

    Вы пробовали просто установить и запустить VB6 в режиме совместимости WinXP?

    Если вы перекомпилируете vb6.exe или иным образом обрабатываете его для машины win7, вы должны знать, что некоторые из новых средств разработки автоматически вставляют манифест, чтобы вы могли проверить это (быстрый способ – открыть исполняемый файл в VS , и найдите ресурс RT_MANIFEST с идентификатором 1). Если есть встроенный манифест, внешние манифесты игнорируются, поэтому, возможно, при редактировании внешнего manfiest ничего не происходит, и его содержимое игнорируется.

    Кроме того, что сказал Эрно о sxstrace (можете ли вы опубликовать результаты, полученные из sxstrace?), Обязательно обновите метку времени VB6.exe, если манифест встроен в нее, или VB6.exe.manifest в противном случае. Vista + Win7 кэширует содержимое манифестов, выбирая метку времени корневого манифеста, чтобы ваши местные изменения не могли получить. Если sxstrace дает вам пустые результаты, обновите отметки времени и повторите попытку.

    Первое, что приходит на ум, – это то, что стоит попробовать подписать код .net. Может быть, что неявно какой-то более высокий уровень безопасности применяется к 64-битной версии win7, для которой требуются подписанные ссылки на сборку.

    Кроме того, вы можете попытаться сузить проблему (в определенном порядке)

    • назовите программу для запуска в качестве администратора и повторите попытку.
    • отметьте программу для запуска в режиме совместимости xp / win2k ”
    • запустите его в dependencywalker (у него есть возможность имитировать загрузку программы и регистрировать ошибки)

    Удачи!

    Я делал эту гибридную отладку на днях и получил ошибку: «Компонент ActiveX не может создать объект». Я предлагаю вам следовать этой статье. Отладка приложений Hybrid Visual Basic 6.0 / Visual Basic .NET и убедитесь, что пример с голыми костями работает на вашем компьютере Win7 (я его reaalise работает с regasm). Затем с битом REG FREE я исследовал следующие ссылки: .NET Object из VB6 без использования regasm.exe? и здесь без регистрации активации компонентов на основе .NET: пошаговое руководство

    Вы можете попробовать использовать / win32 вариант tlbexp на x64 OS.

    Из этого сообщения в блоге

    вы можете использовать SxsTrace, чтобы помочь отладить проблему. Чтобы запустить трассировку «SxsTrace Trace -logfile: SxsTrace.etl», чтобы преобразовать файл журнала в то, что вы можете просмотреть, выполните «SxsTrace Parse -logfile: SxsTrace.etl -outfile: SxsTrace.txt».

    Вы пробовали это?

    Другое дело, что в Vista / Windows 7 вы можете легко запустить UAC, проверяете ли вы это?

    Я смог успешно использовать classы .Net от VB6 в Win 7-64, используя манифесты, созданные Side Man Side Maker . У него есть бесплатная пробная версия.

    Не забудьте включить версию времени исполнения .Net, на которую нацелены ваши classы. Это может быть вашей проблемой, поскольку Win 7 поставляется с предустановленным профилем клиента .Net 4.

    Regasm делает намного больше, чем просто генерирует TLB или необходимые ключи реестра.

    Например, он может создавать COM видимые интерфейсы на основе COM видимых типов. Regasm будет делать это, когда видимый тип COM не реализует интерфейс, например.

    Есть ли у вас какие-либо видимые типы COM, которые не реализуют интерфейс (или не определяют интерфейс COM с помощью ComDefaultInterfaceAttribute)?

    Если это так, это может быть вашей проблемой.