2010-08-24 3 views
1

Есть ли версия regsvr32 для .NET или Win32? Я хотел бы зарегистрировать COM-DLL с кодом вместо того, чтобы обходить программу regsvr32.Есть ли версия regsvr32 .NET или Win32?

+0

Я действительно надеялся ответить 'InstallUtil';) – leppie

+0

Если reg-free COM не работает для меня, я, вероятно, в конечном итоге напишу класс, совместимый с InstallUtil. –

+0

InstallUtil тоже не может работать, у вас нет необходимых разрешений. Не то, чтобы он был разработан для COM BT. –

ответ

5

Стандартный способ регистрации сборки - вызвать функцию экспорта DllRegisterServer на сборку.

В упрощенном виде regsvr32 существу выполняет следующие действия (проверка ошибок опущено для краткости).

HANDLE lib = LoadLibrary(...); 
FARPROC proc = GetProcAddress(lib, "DllRegisterServer"); 
proc(); 
0

Я считаю, что вы просто загрузить DLL, а затем вызвать его на экспорт DllRegisterServer() функцию.

1

Да, это просто требует вызова экспортируемой функции. Тем не менее, дьявол находится в деталях. DLL будет загружать все свои неявно связанные зависимые DLL. И их точки доступа DllMain() будут запущены. Это хорошо в простом процессе, таком как regsvr32, не так хорошо в вашем, что нужно выжить за пределами регистрационного шага.

Затем вы получаете разрешения на запись в реестр. UAC определенно остановит это, как для запуска Regsvr32, так и для вызова точки входа напрямую. Чтобы получить разрешение от пользователя, вам понадобится отдельный EXE с манифестом, который запрашивает права администратора. Ты не впереди.

Обратитесь к бесплатному COM-сообществу, предоставив регистрационную информацию в манифесте. Вам больше не придется регистрировать DLL. Вы получите много хитов, если будете искать этот термин.

+0

Моя цель - приложение, которое может установить себя, если вы передадите правильный ключ командной строки, поэтому у меня нет проблем с выходом после вызова DllRegisterServer. Но reg-free COM звучит интересно. –

+0

Я пропустил что-то или не reg-free COM действительно так же просто, как просто установка 'isol' в true? –

+0

Не бойтесь, отдельные приложения хранят свои библиотеки DLL в бок о бок. Подобный вид манифеста hanky-panky. –

Смежные вопросы