Как остановить приложение Delphi 6 COM server при повторной регистрации в COM при запуске - PullRequest
3 голосов
/ 11 апреля 2011

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

Я не хочу, чтобы это нормально происходило.Мы сделали бы это один раз во время установки под учетной записью администратора и для инициализации реестра COM, но не хотели бы делать это при нормальных условиях работы учетной записи без прав администратора.(если вы контролируете систему с помощью системного монитора sys internals, вы можете увидеть неудачные попытки доступа к ключу реестра).

Есть ли переключатель командной строки, который я могу передать на COM-сервер Delphi 6 для предотвращения этой логики автоматической регистрации COM?

Ответы [ 2 ]

4 голосов
/ 11 апреля 2011

Он всегда будет пытаться зарегистрировать сервер из TComServer.Initialize, если параметр запуска не равен /UNREGSERVER, который удалит параметры реестра. Если параметр запуска /REGSERVER, вы получите исключение, если регистрация не удалась, в противном случае он просто проглотит исключение. Автоматическая регистрация COM-серверов out-proc была удалена в более поздней версии Delphi. Единственное, что вам нужно, чтобы удалить это поведение в Delphi 6, - это изменить TComServer.Inititalize, чтобы регистрировать сервер, только когда FStartMode равно smRegServer или smUnregServer.

4 голосов
/ 11 апреля 2011

Я не думаю, что вы на самом деле видите, что вы думаете ...

Delphi пытается установить COM-серверы, только если они еще не установлены. Я подозреваю, что вы видите, что ваше приложение проверяет, зарегистрировано оно или нет. Причина, по которой вы видите сбои, заключается в том, что в Delphi 6 раздел реестра был бы открыт с правами ALL_ACCESS (D6 был до XP / Vista / Win7), и я думаю, именно это и стало причиной ваших неудачных попыток доступа к реестру. *

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

...