2

Я создал небольшой файл сценария для тестирования.

Это мой файл script.bat .

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

Это мой файл test.bat .

echo "Welcome to Wizard"

Постановка задачи

Я не могу запустить сервис из панели управления Сервисный раздел.

Я получаю следующую ошибку.

[SC] StartService FAILED 1053: Служба не ответила на запрос запуска или управления своевременно.

Вот почему я использую NSSM.

ТЕПЕРЬ что происходит, когда я запускаю следующую команду на powershell

.\nssm установите myService, появится диалоговое окно. Я указываю путь к файлу своего скрипта и нажимаю на сервис установки.

После успешной установки сервиса. Я захожу в панель управления -> Сервис -> нажать на запуск с myService, но он останавливается, и появляется следующее диалоговое окно

Окно не может запустить службу myService на локальном компьютере. Служба не вернула ошибку. Это может быть ошибка Windows или внутренняя ошибка сервиса. Если проблема сохраняется, обратитесь к системному администратору.

  1. Как я могу это исправить?
  2. Есть ли другой способ сделать это, не делая ручные шаги и не используя сторонние инструменты.
  3. Я делаю все это в окне 10. Нужен ли какой-либо сервер для выполнения этой задачи?

ПРИМЕЧАНИЕ: я не могу использовать Всегда вверх или планировщик окон в моем случае.

2 ответа2

2

Поведение NSSM вызвано тем, что скрипт завершается практически мгновенно. Попробуйте следующий скрипт:

echo Hello World
pause

Это должно позволить запустить службу, но вы не обязательно увидите окно консоли. Даже если вы отметите «разрешить сервису взаимодействовать с рабочим столом», он не будет взаимодействовать с вашим рабочим столом!

Используя SysInternals Process Explorer, вы сможете увидеть, как служба NSSM работает с дочерним процессом CMD, который выполняет сценарий.

Windows реализует «нулевую изоляцию сеанса» в качестве функции безопасности, и это по существу предотвращает взаимодействие служб с рабочими столами конечных пользователей.

С точки зрения решения, можно написать приложения-службы Windows довольно просто, используя Visual Studio. Это выходит за рамки моей компетенции, но на основе приложений Windows, с которыми я знаком, у вас обычно было бы приложение, работающее в режиме пользователя, для обеспечения взаимодействия с рабочим столом. Приложение пользовательского режима может взаимодействовать со службами, размещенными приложением службы.

1

Служба Windows - это исполняемая программа, которая должна поддерживать несколько стандартных событий (например, OnStart OnStop, OnPause, OnContinue). Файл .bat не является исполняемым файлом, и вы никогда не сможете запустить его как службу.

Когда вы запускаете bat-файл, запускается программа cmd.exe, но она не поддерживает требуемое событие.

Вы можете написать службу Windows (используя что-то вроде C++ или C # или многих других языков), а затем запрограммировать службу для запуска файла bat в cmd.exe. Однако ваш bat-файл не будет работать, так как сервис не имеет доступа к экрану или клавиатуре.

TL; DR: это просто не сработает. Возможно, если вы зададите другой вопрос о том, что вы на самом деле пытаетесь сделать? Похоже, вы рассматриваете сервис как решение, и вы не описали проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .