Поделиться через


Регистрация

Когда пользователь хочет вставить элемент OLE в приложение, OLE представляет список типов объектов для выбора. OLE получает этот список из базы данных регистрации системы, которая содержит сведения, предоставляемые всеми серверными приложениями. Когда сервер регистрирует себя, записи, которые он помещает в базу данных регистрации системы (реестр), описывают каждый тип объекта, который он предоставляет, расширения файлов и путь к самому себе, среди других сведений.

Платформа и библиотеки динамической компоновки OLE используют этот реестр, чтобы определить, какие типы элементов OLE доступны в системе. Библиотеки DLL системы OLE также используют этот реестр для определения способа запуска серверного приложения при активации связанного или внедренного объекта.

В этой статье описывается, что должно делать каждое серверное приложение при установке и при каждом запуске.

Подробные сведения о базе данных регистрации системы и формате файлов .reg, используемых для его обновления, см. в справочнике разработчика OLE.

Установка сервера

При первой установке серверного приложения он должен зарегистрировать все типы поддерживаемых элементов OLE. Кроме того, можно настроить сервер для обновления базы данных регистрации системы при каждом его запуске как автономного приложения. При перемещении исполняемого файла сервера это сохраняет актуальность базы данных регистрации up-to.

Замечание

Приложения MFC, созданные мастером приложений, автоматически регистрируются при запуске в качестве автономных приложений.

Если вы хотите зарегистрировать приложение во время установки, используйте программу RegEdit.exe. Если вы включаете программу установки в приложение, запустите программу установки RegEdit /S appname.reg. (Флаг /S указывает автоматическую операцию, то есть не отображает диалоговое окно, сообщающее об успешном завершении команды.) В противном случае указать пользователю запустить RegEdit вручную.

Замечание

Файл .reg, созданный мастером приложений, не содержит полный путь к исполняемому файлу. Программа установки должна изменить файл .reg, чтобы включить полный путь к исполняемому файлу или изменить переменную среды PATH, чтобы включить каталог установки.

RegEdit объединяет содержимое текстового файла .reg в базу данных регистрации. Чтобы проверить базу данных или восстановить ее, используйте редактор реестра. Старайтесь избегать удаления важных записей OLE.

Инициализация сервера

При создании серверного приложения с помощью мастера приложений мастер автоматически завершает все задачи инициализации. В этом разделе описывается, что необходимо сделать при написании серверного приложения вручную.

Когда серверное приложение запускается приложением-контейнером, библиотеки DLL системы OLE добавляют параметр "/Внедрение" в командную строку сервера. Поведение серверного приложения отличается в зависимости от того, был ли оно запущено контейнером, поэтому первое, что должно сделать приложение при запуске, — это проверить наличие параметра "/Внедрение" или "-Внедрение" в командной строке. Если этот параметр существует, загрузите другой набор ресурсов, показывающих сервер как активный или полностью открытый. Дополнительные сведения см. в меню и ресурсах: дополнения сервера.

Серверное приложение также должно вызвать ее CWinApp::RunEmbedded функцию, чтобы проанализировать командную строку. Если он возвращает ненулевое значение, приложение не должно отображать его окно, так как оно было запущено из приложения контейнера, а не как автономное приложение. Эта функция обновляет запись сервера в базе данных регистрации системы и вызывает RegisterAll функцию-член для вас, выполняя регистрацию экземпляра.

При запуске серверного приложения необходимо убедиться, что он может выполнять регистрацию экземпляров. Регистрация экземпляра сообщает библиотекам DLL системы OLE, что сервер активен и готов получать запросы от контейнеров. Он не добавляет запись в базу данных регистрации. Выполните регистрацию экземпляра сервера, вызвав функцию-член, определенную ConnectTemplateCOleTemplateServer. Это соединяет объект CDocTemplate с объектом COleTemplateServer.

Функция ConnectTemplate принимает три параметра: CLSID сервера, указатель на CDocTemplate объект и флаг, указывающий, поддерживает ли сервер несколько экземпляров. Минисервер должен поддерживать несколько экземпляров, то есть должно быть возможно одновременное выполнение нескольких экземпляров сервера, по одному для каждого контейнера. Следовательно, передайте значение TRUE для этого флага при запуске мини-сервера.

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

См. также

OLE
Серверы
CWinApp::RunAutomated
CWinApp::RunEmbedded
Класс COleTemplateServer