Delphi XE2 New Service - Почему он включает эти модули VCL? - PullRequest
3 голосов
/ 14 февраля 2012

Я немного озадачен, почему, когда вы создаете новое сервисное приложение в Delphi XE2, оно включает в себя эти 3 визуальные компоненты?

Vcl.Controls
Vcl.Dialogs
Vcl.Graphics

Насколько я знаю, в этих единицах нет ничего, что потребовалось бы Службе. Я могу видеть, что графический модуль, возможно, используется для некоторой обработки изображений, но это вопрос реализации его разработчиком. Есть ли какая-то причина, по которой эти устройства автоматически включаются в новое сервисное приложение? Если я их уберу, это ничего не повредит ... Или это?

1 Ответ

7 голосов
/ 14 февраля 2012

Это добавляется генератором кода IDE, "на всякий случай" ... IDE в основном создает формы, поэтому добавляет их в ваш сервисный модуль, даже если в вашем сервисе нет необходимости в пользовательском интерфейсе.

Что забавно, так как начиная с Windows Vista / Seven, сервисы больше не могут отправлять сообщения GDI на рабочий стол, то есть взаимодействовать с ним. Таким образом, определенно нет даже возможности использовать диалоги или элементы управления пользовательским интерфейсом из службы Windows.

На самом деле, даже SvcMgr.pas ссылается на Forms.pas + Dialogs.pas единиц. Таким образом, удаление ссылки в вашем собственном подразделении будет продолжать связывать эти подразделения.

Похоже, что Forms.pas + Dialogs.pas требуется SvcMgr.pas для отображения сообщения о потенциальной ошибке при установке службы в командной строке.

На самом деле, ваша служба .exe работает не только в фоновом режиме, а как служба. Его также можно запустить из командной строки, как обычное приложение, чтобы установить / удалить / запустить / остановить службу.

Вы можете взглянуть на нашу более легкую реализацию служб Windows в Delphi - но не на те же функции - просто кое-что, чтобы поиграть с API. Эта версия не содержит ссылок на Forms.pas и Dialogs.pas единиц.

...