Как служба Windows может программно перезапустить себя?

Значение «this» зависит от «контекста», в котором выполняется функция. Контекстом может быть любой объект или глобальный объект, т. Е. Окно.

Таким образом, семантика «этого» отличается от традиционных языков ООП. И это вызывает проблемы: 1. когда функция передается другой переменной (скорее всего, обратный вызов); и 2. когда замыкание вызывается из метода-члена класса.

В обоих случаях это устанавливается в окно.

130
задан Ron Harlev 14 August 2014 в 17:29
поделиться

9 ответов

Установите сервис для перезапуска после отказа (дважды щелкните по сервису в панели управления и взгляните вокруг на те вкладки - я забываю название его). Затем каждый раз, когда Вы хотите, чтобы сервис перезапустил, просто звоните Environment.Exit(1) (или любой ненулевой возврат), и ОС перезапустит его для Вас.

181
ответ дан developer82 14 August 2014 в 17:29
поделиться

Лучший подход может быть должен использовать Сервис NT как обертку для Вашего приложения. Когда Сервис NT запускается, Ваше приложение может начать в "неактивном" режиме, ожидающем команды запускаться (или настраиваться для запуска автоматически).

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

0
ответ дан plamb 14 August 2014 в 17:29
поделиться
  • 1
    Используя возврат каретки (например, print 'Downloading.... \r') также doesn' t очищают предыдущие данные, но они предотвращают необходимость знать как далеко вплотную. – cod3monk3y 19 February 2014 в 15:24

Я не думаю, что это может. Когда сервис "останавливается", он полностью разгружен.

ну, хорошо, всегда существует способ, которым я предполагаю. Например, Вы могли создать отдельный процесс для остановки сервиса, затем перезапустить его, затем выйти.

1
ответ дан T.E.D. 14 August 2014 в 17:29
поделиться

Это зависело бы от того, почему Вы хотите, чтобы это перезапустило себя.

, Если Вы просто ищете способ сделать, чтобы сервис вычистил себя периодически затем, у Вас мог быть таймер, работающий в сервисе, который периодически вызывает стандартную программу чистки.

при поиске способа перезапустить при отказе - сам сервисный хост может обеспечить ту способность, когда это - установка.

Итак, почему необходимо перезапустить сервер? Чего Вы пытаетесь достигнуть?

5
ответ дан Brody 14 August 2014 в 17:29
поделиться

Я не думаю, что Вы можете в автономном сервисе (при вызове Перезапуска он остановит сервис, который прервет команду Restart, и он никогда не будет начинать снова). Если можно добавить второй .exe (Консольное приложение, которое использует класс ServiceManager), то можно начать автономный .exe и иметь его, перезапускают сервис и затем выходят.

Вообще-то, если задуматься, Вы могли, вероятно, сделать, чтобы сервис зарегистрировал Запланированную задачу (использующий командную строку 'при' команде, например), чтобы запустить сервис и затем иметь его сама остановка; это, вероятно, работало бы.

3
ответ дан technophile 14 August 2014 в 17:29
поделиться

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

16
ответ дан Greg Hewgill 14 August 2014 в 17:29
поделиться
  • 1
    существует именно так много волшебства, происходящего здесь.. Модель User расширяет Активную Запись. каким образом создать метод переопределяется. Где пароль зашифровал? – codeAnand 16 December 2011 в 22:15

Можно создать процесс, который является командной строкой DOS который перезапуски сами:

 Process process = new Process();
 process.StartInfo.FileName = "cmd";
 process.StartInfo.Arguments = "/c net stop \"servicename\" & net start \"servicename\"";
 process.Start();
10
ответ дан VladL 14 August 2014 в 17:29
поделиться
  • 1
    Похож сохраняют (ложь), depcreated, теперь должно быть сохранение (: проверьте = > ложь) – Martin 7 December 2010 в 00:47

Я использовал бы Windows Scheduler для планирования перезапуска сервиса. Проблема состоит в том, что Вы не можете перезапустить себя, но можно остановить себя. (Вы по существу отпилили сук, на котором Вы сидите..., если Вы получаете мою аналогию), Вам нужен отдельный процесс, чтобы сделать это для Вас. Windows Scheduler является соответствующим. Запланируйте одноразовую задачу перезапустить Ваш сервис (даже из самого сервиса) для выполнения сразу.

Иначе, необходимо будет создать процесс "выпаса", который делает это для Вас.

2
ответ дан dviljoen 14 August 2014 в 17:29
поделиться

Самый простой способ - создать командный файл с:

net stop net start

и добавьте файл в планировщик с желаемым интервалом времени

-2
ответ дан 24 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: