Назад | Перейти на главную страницу

Что делает regsvr32?

Чтобы зарегистрировать файл DLL на сервере Windows с помощью regsvr32, вам сначала нужно переместить файл на свой system32 папку или это на самом деле выполняется автоматически после вызова regsvr32 команда?

Если я просто закину на рабочий стол файл dll и зарегистрирую его там, могу ли я просто удалить его после регистрации? Что будет после его удаления?

Другими словами, как на самом деле работает regsvr?

RegSvr32 вызывает экспортированный метод DllRegisterServer в DLL. Что конкретно произойдет дальше, зависит от реализации. Часто ключи реестра для COM записываются в зависимости от расположения файла. Регистрацию, как правило, не следует рассматривать как программу установки, которая делает гораздо больше.

Если в приложении нет чего-то особенного, его можно зарегистрировать откуда угодно, но после этого не следует перемещать / удалять его. SysMon от SysInternal Вы можете наблюдать за доступом к файлам и реестру, когда вы вызываете регистрацию, если вы действительно хотите увидеть подробности - хотя ничто не мешает коду ничего не делать или действительно что-то, что код может делать, например, доступ в Интернет, запись или удаление других файлов и т. Как и любой исполняемый файл, зарегистрируйте только тот код, которому вы доверяете.

А также есть DllInstall что можно назвать с regsvr32 /i который предназначен для установки в соответствии с regsvr32 документация:

Regsvr32
Этот инструмент командной строки регистрирует файлы .dll как компоненты команд в реестре.
Синтаксис
regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] имя библиотеки
Параметры
/ u : Отменяет регистрацию сервера.
/ с : Указывает, что regsvr32 будет работать в автоматическом режиме и не отображать окна сообщений.
/ п : Указывает не вызывать DllRegisterServer. Вы должны использовать этот параметр с / i.
/ i: cmdline : Вызывает DllInstall, передав ему необязательную [cmdline]. При использовании с / u вызывает удаление dll.
dllname : Указывает имя файла DLL, который будет зарегистрирован.
/? : Отображает справку в командной строке.

А также есть DllUnregisterServer, но из практического опыта реализация этого обычно бывает более низкого качества, чем регистрация.

Одна из целей установщика Windows (MSI) состояла в том, чтобы отделить установку от такого кода.

В дополнение к правильному ответу @Matthew Wetmore обычно происходит то, что он регистрирует все компоненты COM в этой dll.

В частности, он создает два ключа (+ подразделы) в реестре Windows.

Например. рассмотрим dll: dao360.dll, в котором есть несколько COM-объектов. Для каждого первого ключа это что-то вроде:

HKLM \ SOFTWARE \ Classes \ DAO.TableDef.36

для объекта определения таблицы DAO имя ключа - это ProgID COM-объекта, на который программисты будут ссылаться в своем коде.

Под ключом обычно находится один ключ со значением по умолчанию:

HKLM \ SOFTWARE \ Classes \ DAO.TableDef.36 \ CLSID

в таком случае:

{00000103-0000-0010-8000-00AA006D2EA4}

это идентификатор класса или CLSID для COM-объекта, он сообщает нам, где находится второй ключ:

HKLM \ SOFTWARE \ Classes \ CLSID {00000103-0000-0010-8000-00AA006D2EA4}

Этот ключ с его подразделами и значениями содержит дополнительную информацию о COM-объекте.

Следует обратить внимание на значение по умолчанию:

HKLM \ SOFTWARE \ Classes \ Wow6432Node \ CLSID {00000103-0000-0010-8000-00AA006D2EA4} \ InprocServer32

в нем указан путь к файлу exe / dll, в котором находится COM-объект, в нашем примере:

%CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll

Это правильный путь к файлу, когда для регистрации этого COM-объекта использовался regsvr32.exe. Если вы переместите файл вручную, COM-объект перестанет работать, поскольку это значение реестра теперь ссылается на отсутствующий файл.

Поэтому, прежде чем использовать regsvr32.exe в DLL, переместите его в окончательное расположение и не перемещайте DLL после ее регистрации.