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
единицы.