Clarion Application as Windows NT Service

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion Application as Windows NT Service

Сообщение Developer »

Привет всем!

Необходима работа приложения Clarion в качестве службы Windows (Clarion Application as Windows NT Service)
Успешно применяю шаблон ABC Free http://www.authord.com/ Работает отлично! :D

Есть вопрос: что необходимо изменить в исходном тексте Clarion для создания службы чтобы создавалось описание назначение этой службы - раздел реестра "Description".

Как решение, пробовал к службе ->Описание<- создавать через модификацию реестра.

Вопрос: есть ли решение создания раздела ->Описание<- через создание самой службы в исходном коде Clarion?

А также, как указать именно в исходном коде Clarion под какой учётной записью стартует служба и как произвести выборку существующей учётной записи?

Код: Выделить всё

 SCMHandle = OpenSCManager(ServicesMachineName,ServicesDatabaseName,SC_MANAGER_CREATE_SERVICE+STANDARD_RIGHTS_REQUIRED) ! apiNTServices (ABC Free)

   IF SCMHandle                                            ! apiNTServices (ABC Free)
      ServiceHandle = CreateService(    |!(Win32 API)
            SCMHandle,                  |! SCManager database
            ServiceName,                |! name of service
            DisplayName,                |! name to display
            SERVICE_ALL_ACCESS,         |! desired access to service
            SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS * 1,  |! service type
            SERVICE_AUTO_START,         |! start type
            SERVICE_ERROR_NORMAL,       |! error control type
            Executable,                 |! service's binary location
            0,                 |! address of: no load ordering group
            0,                 |! address of: no tag identifier
            0,                 |! address of: no dependencies
            0,                 |! address of: no LocalSystem account  -> Здесь указана учётная запись под какой старует служба?
            0)                 ! address of: no password                   -> Назначение параметра?

         
С Уважением, Developer
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion Application as Windows NT Service

Сообщение Developer »

Admin спасибо за ссылку! Разбираюсь..... Но пока для меня очень тяжеловато :(

А старт службы c определённой учётной записью как решить?

Может у кого есть решение в кодах Clarion?
С Уважением, Developer
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Developer писал(а):А старт службы c определённой учётной записью как решить?
Попробуйте напрямую в шаблоне описать переменную к примеру
GLO:ServiceUserName CSTRING(100)
занести в нее имя пользователя
GLO:ServiceUserName = '.\UserName'
и передать ее в функцию. т.е. написать типа

Код: Выделить всё

      ServiceHandle = CreateService(    |!(Win32 API)
            SCMHandle,                  |! SCManager database
            ServiceName,                |! name of service
            DisplayName,                |! name to display
            SERVICE_ALL_ACCESS,         |! desired access to service
            SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS * %InteractWithDesktop,  |! service type
            SERVICE_AUTO_START,         |! start type
            SERVICE_ERROR_NORMAL,       |! error control type
            Executable,                 |! service's binary location
            0,                          |! address of: no load ordering group
            0,                          |! address of: no tag identifier
            0,                          |! address of: no dependencies
            ADDRESS(GLO:ServiceUserName ),                          |! address of: no LocalSystem account
            0)                           ! address of: no password
Если тип службы - SERVICE_WIN32_OWN_PROCESS, используйте имя учетной записи в форме DomainName\UserName. Процесс службы начнет работу как этот пользователь. Если учетная запись принадлежит встроенному домену, Вы можете задать .\UserName
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Вот исправленные шаблоны последней версии. Проверил, сервис запускается под юзером.
Юзер и пароль в шаблоне задается текстом или переменными. см. шаблон и код.
Единственный момент. Должна быть отключена опция "Interact With Desktop". С ней не устанавливается сервис.
х.з. почему. Разбираться дальше лениво. Куда копать показал!
Вложения
apiNTServices.zip
(10.09 КБ) 136 скачиваний
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion Application as Windows NT Service

Сообщение Developer »

Admin, ещё раз спасибо за помощь!
Должна быть отключена опция "Interact With Desktop"
Правильно ли я понял:

Вместо SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS * %InteractWithDesktop, |! service type
Использовать SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS * 1, |! service type
или использовать SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS, |! service type
С Уважением, Developer
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Просто эту опцию в шаблоне отключай. Тогда будет
SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS * 0
(т.е. при умножении на 0, SERVICE_INTERACTIVE_PROCESS отключится)
Если в ручную пишешь то оставь только флаг SERVICE_WIN32_OWN_PROCESS
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

По поводу SERVICE_INTERACTIVE_PROCESS тут есть
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Просто иногда захватывает мысль докопаться. Но после получения результата какого либо, дальше рыть не интересно. :idied:
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion Application as Windows NT Service

Сообщение Developer »

Admin спасибо за модифицированные шаблоны! Всё отлично работает!

Interact With Desktop обычно применяют для Windows XP и ниже.

В Windows 7 и выше Interact With Desktop под запретом хотя и работает. Мне он не нужен.

Осталось только решить вопрос как программно из самого приложения Clarion которое и есть файл службы
управлять запуском и остановкой службы.

Мои попытки сделать эти процедуры на основе существующих пока безуспешны :(

Сталкивался ли с такой задачей и есть ли решение?
С Уважением, Developer
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Developer писал(а): Осталось только решить вопрос как программно из самого приложения Clarion которое и есть файл службы
управлять запуском и остановкой службы.
Service Control Program Tasks
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Yufil »

Хмм, вроде те же шаблоны от Authord позволяют вызвать инсталляцию сервиса командной строкой
Я делал в exe GUI-меню с пунктами
Регистрировать Run(Command('0') & ' /IS')
Разрегистрировать Run(Command('0') & ' /RS')
Стартовать Net Start Имясервиса
Остановить Net Stop Имясервиса

Всё работало
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion Application as Windows NT Service

Сообщение Developer »

Yufil писал(а): Хмм, вроде те же шаблоны от Authord позволяют вызвать инсталляцию сервиса командной строкой Я делал в exe GUI-меню с пунктами Регистрировать Run(Command('0') & ' /IS') Разрегистрировать Run(Command('0') & ' /RS') Стартовать Net Start ИмясервисаОстановить Net Stop Имясервиса Всё работало
Мне это известно и согласен что работает!

Однако:
Стартовать Net Start Имясерв
Остановить Net Stop Имясервиса
Это внешние команды операционной системы :D

Мне необходимо выполнить эти действия из файла самой службы кодом процедурами Clarion.

Впрочем, как одно из решений возможно попробовать создать из приложения новый процесс
и выполнить эти команды. :wink:

А вот как это сделать в коде Clarion точно также как процедуры установки и удаления используя SCM?
С Уважением, Developer
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Yufil »

Ну, конечно, Run('Net Start .... '), воспроизводил по памяти :?
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Clarion Application as Windows NT Service

Сообщение Admin »

Developer писал(а): А вот как это сделать в коде Clarion точно также как процедуры установки и удаления используя SCM?
Я же дал ссылку с примером. Или вы хотите готовый код? :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить