В чем разница между Regserver и RegSvr?

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

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

RegSvr32 COM.exe

или

RegSvr32 COM.dll

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

COM.exe /RegServer
COM.exe /RegSvr

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

2 ответов


существуют значительные различия в 32-и 64-разрядном реестре.

Windows 64-разрядный реестр V. s. 32-разрядный реестр

более конкретно, вы не можете зарегистрировать 64-разрядную DLL с regsvr32.

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/f8898224-76ca-4047-90d3-20c63f71a2d8/


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

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

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

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

читайте Регистрация:

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

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

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