Delphi XE2 New Service - Почему он включает эти модули VCL?

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

Vcl.Controls
Vcl.Dialogs
Vcl.Graphics

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

1 ответ

Решение

Это добавляется генератором кода 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 единицы.

Другие вопросы по тегам