Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Скрытие регистрации COM-сервера в проектах Delphi для повышения удобства использования

Delphi , Технологии , COM и DCOM

Скрытие регистрации COM-сервера в проектах Delphi для повышения удобства использования

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

Проблема

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

Решение

Попытки обернуть создание COM-объекта в try-catch не увенчались успехом, также не помогло добавление параметра командной строки для включения сервера, поскольку скрипты запускали бы программу без этого параметра. В качестве альтернативного решения было предложено использовать регистрацию COM-сервера для каждого пользователя (PerUserRegistartion), что не требует прав администратора, или же использовать регистрацию без создания записей в реестре (Registration Free COM).

Подтвержденный ответ

Для решения проблемы был создан класс TMyAutoObjectFactory, наследующий TAutoObjectFactory, с переопределением метода UpdateRegistry для выполнения регистрации в беззвучном режиме, используя try/except. Пример кода на Object Pascal (Delphi):

type
  TMyAutoObjectFactory = class(TAutoObjectFactory)
  public
    procedure UpdateRegistry(Register: Boolean); override;
  end;
{ TMyAutoObjectFactory }
procedure TMyAutoObjectFactory.UpdateRegistry(Register: Boolean);
begin
  try
    inherited;
  except
    // беззвучное игнорирование ошибки
  end;
end;
initialization
  TMyAutoObjectFactory.Create(ComServer, TMyObjectSomething, Class_MyObjectSomething, ciMultiInstance, tmApartment);
end.

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

Альтернативное решение

Было решено использовать блок try-except вокруг метода ComServer.Initialize, так как ошибка возникала именно там:

PROCEDURE TComServer.Initialize;
BEGIN
  TRY
    TRY
      UpdateRegistry(FStartMode <> smUnregServer);
    EXCEPT
      ON E: EOleRegistrationError DO
      // Пользователь может не иметь прав на запись в реестр.
      // Заглушаем исключение, если мы не пытались зарегистрировать сервер.
        IF FStartMode = smRegServer THEN RAISE;
    END;
    IF FStartMode IN [smRegServer, smUnregServer] THEN Halt;
    ComClassManager.ForEachFactory(Self, FactoryRegisterClassObject);
  EXCEPT
  ELSE
    FStartSuspended := true;
  END;
END;

Этот подход позволяет программе запуститься, даже если сервер не зарегистрирован, что и является желаемым результатом.

Заключение

Для повышения удобства использования проектов Delphi с COM-интерфейсами, важно уметь управлять процессом регистрации COM-сервера, особенно в среде, где не все пользователи имеют права администратора. Использование беззвучного игнорирования ошибок позволяет запустить программу, даже если сервер не может быть зарегистрирован, что особенно полезно для внутренних проектов, где ожидается, что пользователи будут копировать и запускать приложение без дополнительных действий.

Создано по материалам из источника по ссылке.

Описание Context: При разработке в Delphi с использованием COM-серверов необходимо найти способ скрыть процесс регистрации сервера от пользователей для удобства использования программ, особенно если они запускаются без регистрации сервиса.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: COM и DCOM ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 01:58:43/0.0034902095794678/0