В чем разница между 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.