В чем разница между RegSvr и RegServer? - PullRequest
9 голосов
/ 16 июня 2010

/RegServer и /RegSvr одинаковы или различны, если отличаются, почему / как?

Например, я видел (пример из 32-битной ОС) этот стиль:

RegSvr32 COM.exe

или

RegSvr32 COM.dll

Или как альтернатива (которая была на 64-битной ОС):

COM.exe /RegServer
COM.exe /RegSvr

Эти разные подходы делают одно и то же?

1 Ответ

9 голосов
/ 20 июня 2016

COM-серверы регистрируются одинаково в 32-битных 64-битных операционных системах.Этот вопрос связан с саморегистрацией, наиболее простым способом регистрации COM-сервера - запросом у сервера обновить реестр HKLM / HKCR соответственно.

Поскольку вы не можете запустить DLL напрямую, вы используете помощник regsvr32 приложение.Короче говоря, выглядит, является ли DLL 32- или 64-битной и использует соответствующую версию приложения.Затем он загружает DLL и передает управление для регистрации.

EXE COM-серверы EXE могут запускаться напрямую, поэтому вы должны передать им параметры / regserver или / unregserver.

Методыдействительно для 32- и 64-разрядных COM-серверов, для 32- и 64-разрядных операционных систем.

Дополнительные сведения - Самостоятельная регистрация :

Еслисервер упакован в модуль DLL, DLL должна экспортировать функции DllRegisterServer и DllUnregisterServer.Любое приложение, которое хочет дать серверу команду зарегистрировать себя (то есть все его CLSID и идентификаторы библиотек типов), может получить указатель на DllRegisterServer через функцию GetProcAddress.В DllRegisterServer библиотека DLL создает все необходимые записи реестра, сохраняя правильный путь к библиотеке DLL для всех записей InprocServer32 или InprocHandler32.

Когда приложение желает удалить компонент из системы, оно должно отменить регистрацию этого компонента с помощьювызывая DllUnregisterServer.В рамках этого вызова сервер удаляет именно те записи, которые он ранее создал в DllRegisterServer.Сервер не должен слепо удалять все записи для своих классов, потому что другое программное обеспечение может хранить дополнительные записи, такие как ключ TreatAs.

Если сервер упакован в EXE-модуль, приложение, желающее зарегистрировать сервер, запускаетсясервер EXE с аргументом командной строки / RegServer или -RegServer (без учета регистра).Если приложение хочет отменить регистрацию сервера, оно запускает EXE с аргументом командной строки / UnregServer или -UnregServer.Саморегистрация EXE обнаруживает эти аргументы командной строки и вызывает те же операции, что и DLL в DllRegisterServerand и DllUnregisterServer, соответственно, регистрируя путь к своему модулю в LocalServer32 вместо InprocServer32 или InprocHandler32.

...