Пара нюансов при создании службы (Windows Service) и не только
Оказывается, в VCL нет встроенных средств для запуска службы. Службу можно установить, а запускаться она будет только после перезагрузки компьютера. Довольно странно, но факт.
Решить эту проблему через WinAPI (если класс нашей службы называется TMyService):
Каким же образом сообщить службе об изменении конфигурации (чтобы она прочитала её заново – из реестра или с диска)? Проще всего – создать глобальное именованное событие (CreateEvent) и через него сигнализировать (SetEvent) из конфигуратора службе (которая будет ждать его, либо периодически проверять, через WaitForSingleObject). Но тут нас поджидает засада: при попытке открыть из конфигуратора событие (OpenEvent), созданное службой, мы получим ошибку запрета доступа (GetLastError = ERROR_ACCESS_DENIED).
Это происходит из-за того, что объект (событие) создан «системой» (службы запускаются от имени «системы»), а открывается администратором (если конфигуратор находится в том же EXE – установить/удалить службу может только администратор) или даже обычным пользователем (если конфигуратор находится в другом EXE-шнике). Тоже самое будет при попытке открыть обычным пользователем объект, созданный администратором.
Что же делать? Сначала я решил пойти по странному пути: создать объект в конфигураторе, а в службе периодически пытаться открыть его, и после успешного открытия начать проверять состояние («система» может открыть объект, созданный администратором или обычным пользователем). Но потом эта идея мне показалась костыльной, и я решил разобраться, как создать объект в службе, не защищённый от доступа админов и обычных юзеров.
Вот так это делается (в службе):
(разумеется, при необходимости создания нескольких событий нет смысла создавать и настраивать несколько дескрипторов и атрибутов безопасности, можно использовать одни и те же; при завершении работы ничего, кроме события, закрывать или освобождать не нужно)
Delphi: службы
КОМПЬЮТЕРНЫЕ КУРСЫ «ПОИСК»
Пример проекта службы
Попробуем создать демонстрационный проект простейшего сервиса для ОС Windows NT. Для этого откроем диалоговое окно New Items и на странице New дважды щелкнем по пиктограмме Service Application.
В результате Delphi создаст шаблон проекта службы с одним сервисом.
Начнем работу с конфигурирования сервиса. Для этого выберем модуль Service1 и внесем ряд изменений в его свойства:
Тип сервиса: | ServiceType:=stWin32; |
---|---|
Интерактивность: | Interactive:=true; |
Имя сервиса: | Name:=DemoService; |
Название: | DisplayName:=Демонстрация сервиса; |
Тип старта: | StartType:=stManual; |
Реакция на ошибки при старте: | ErrorSeverity:=esIgnory; |
Сохраните проект в отдельном каталоге, при этом модуль службы назовите DemoSrv.pas, а весь проект – dmsrv.dpr. В секции частных объявлений модуля DemoSrv.pas опишем две переменные:
В момент старта сервиса получаем контекст дисплея и обнуляем счетчик:
Переходим к описанию события OnExecute() сервиса. О факте работы сервиса информируем пользователя текстовой строкой, в которой выводим текущее значение счетчика. Служба остановится в случае, когда счетчик превысит значение 100 или по команде от внешней управляющей программы. Для этого внутри цикла с помощью ProcessRequests() регулярно производим асинхронный опрос менеджера служб на предмет поступления команд от внешних приложений.
Обращаю внимание, что вывод текстовой строки на экран возможен только в случае, когда сервис работает в интерактивном режиме. Событие остановки используем для освобождения дескриптора контекста устройства:
Регистрация службы средствами приложения
Для регистрации службы в операционной системе владеющее службой приложение должно быть запущено из командной строки с ключом /INSTALL. Например:
Для снятия с регистрации применяют ключ /UNINSTALL. Процесс установки сервиса сопровождается выводом уведомляющего сообщения. Для отказа от показа окна уведомления используйте ключ /SILENT. Откройте консоль управления службами компьютера, найдите в ней наш сервис «Демонстрация сервиса» и запустите его на выполнение…
Источник: Д.Осипов — Delphi. Профессиональное программирование.
Исходный код примера здесь. Выполнен на Delphi XE.
Лучшие IT-решения для бизнеса
Nav view search
Navigation
Search
Программирование, доработки консультации по 1С
Как мы работаем
1. Обсуждаем проблему по телефону. При наличии удаленного доступа — показываете на экране вашего компьютера.
2. Мы оцениваем работу в рублях, если проект большой, если нет — примерное кол-во часов.
3. Мы выполняем работу.
4. Вы принимаете работу в вашей программе, если есть недочеты мы их исправляем.
5. Мы выставляем счет, вы оплачиваете.
Стоимость работ
1. Все работы делятся на 3 категории: консультация, обновление типовой конфигурации, разработка или программирование нового отчета, обработки, кнопки и т.п.
2. Стоимость работ по категориям:
Услуга | Цена | Минимальный объем работ |
Консультации | 900 р/час | 1 час, далее по 20 мин. |
Обновления | 1100 р/час | 1 база |
Программирование | 1400 р/час | 1 час, далее по 20 мин. |
3. На работы более 10 часов предварительно составляется техническое задание с описанием и стоимостью работ. Работы начинаются после согласования ТЗ с вами.
Техническая поддержка
1. Если вы обнаруживаете какие то ошибки, в ранее принятых работах, в течении 3х месяцев, мы исправляем их бесплатно.
2. Постоянным клиентам любые недочеты, допущенные в наших работах, исправляем бесплатно в течении года.
Программы для управления вашим бизнесом.
1С:Предприятие
Мы являемся официальным дилером фирмы 1С, вы можете приобрести у нас различные программные продукты и лицензии. Кроме покупки «коробки» мы поможем вам настроить программу, проконсультируем и сделаем базовые настройки.
- Бухгалтерский учет
- Автоматизация магазина
- Оптовые продажи
- Помощь в установке и первоначальной настройке включена в пакет!
- Тонкая настройка конфигураций под нужды заказчика, разработка новых модулей при отсутствии необходимых функций в стандартной конфигурации.
1С:Бухгалтерия | 1С:Управление торговлей | 1С:Розница | 1С:Зарплата и Управление Персоналом |
От 3300 руб. | От 6700 руб. | От 3300 руб. | От 7400 руб. |
Предоставление сервера.
Моментальная настройка сервер + 1С.
Нет сервера? Не беда, подберем и быстро настроим сервер в «облаке». За небольшую плату вы получаете очень надежное решение.
- Доступность 24\7
- Нет необходимости держать собственного системного администратора (экономия покроет расходы на ваш сервер).
- Быстрая настройка и установка 1С на сервер, через 3 дня у вас уже будет полностью рабочая система.
- В любой момент можно переехать на локальный сервер, если решение не устроит.
SMS из вашей 1С
Хотите чтобы клиенты во время узнавали об акциях, скидках? Клиенты не возвращаются? Настройте отправку SMS прямо из 1С!
Наша компания сможет в короткие сроки настроить отправку SMS Вашим клиентам напрямую из 1С. Примеры событий которые можно автоматизировать:
- Благодарность за покупку и начисление бонусов сразу после очередной покупки.
- Начисление бонусов на карту в подарок на день рождения\к другому знаменательному или праздничному дню.
- Извещение о поступлении товара на склад.
- Истечение срока подарочных бонусов.
- Извещение о поступлении предоплаты и резервирования товара.
- Адрес с уточнениями проезда к магазину\офису, номера телефонов.
- И т.п.
Настройку в 1С можно произвести силами наших специалистов или своих сотрудников. Ознакомится с тарифами можно на странице SMS-тарифов.
- Гарантия доставки SMS, деньги снимаются только за доставленные SMS.
- Отдельная тарификация каждого SMS.
- Пополнение баланса разными способами.
- Просмотр истории всех отправленных SMS в любой момент.
- Имя отправителя вместо цифрового номера в телефоне получателя сообщения.