VB6. NET проблема взаимодействия в Vista - PullRequest
1 голос
/ 05 июня 2009

Я написал сборку на C #, и мне нужно было вызвать метод в DLL из приложения VB6.0. Я сделал DLL COM-совместимым и зарегистрировал DLL соответственно. Из моего приложения VB я бы затем создал экземпляр класса в сборке .NET, используя метод VB6.0 CreateObject.

Set dotNetObj = CreateObject("Namespace.ClassName")

Тогда я смогу вызвать любой метод в этом классе.

Проблема:

Все работало нормально, пока я не попытался выполнить код на машине с Vista. Всякий раз, когда я запускаю исполняемый файл, он работает нормально, но всякий раз, когда исполняемый файл исполняется с использованием параметра «Запуск от имени администратора», появляется следующая ошибка:

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

Мне нужно, чтобы этот EXE-файл запускался в режиме администратора, иначе некоторые области устаревшей системы не будут работать.

Есть идеи, почему CreateObject не будет работать в режиме администратора?

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Похоже, что COM-компонент зарегистрирован только для пользователя - поэтому, когда администратор пытается это сделать, clsid неизвестен. Попробуйте запустить процесс isntallation / registration для администратора.

(Vista помещает clsids в HKCU? Или просто HKLM?)

Быстрый поиск указывает на то, что это связано с тем, включен или отключен UAC ... с включенным он выглядит в HKCU ... отключен и выглядит в HKLM. Поэтому, если вы устанавливаете в HKCU, его не будет для администратора с отключенным UAC.

0 голосов
/ 05 июня 2009

Потому что он зарегистрирован только в пространстве пользователя?

Попробуйте зарегистрировать вашу dll в админке

regasm mycomponent.dll /register /codebase /tlb

...