Передача аргумента cmd запущенному процессу при завершении работы службы Windows

334
Örvar

Я создаю windowservice, который запускает процесс, в котором я передаю несколько аргументов cmd в StartInfo.Arguments. Это работает нормально, как и ожидалось.

Проблема в том, что когда я останавливаю службу Windows, мне нужно сказать, чтобы работающая программа корректно завершила работу до остановки службы Windows. Потому что, если я просто убью процесс, программа не сохранит собранные данные. Программа, которую я запускаю, - это Process Monitor, и она принимает следующую команду "/terminate".

Как я могу передать /terminateаргумент до остановки моей службы Windows?

0
Разве вы не можете использовать пакетный файл, который сначала закрывает запущенную программу с помощью `start / wait`, а затем останавливает службу с помощью команды [` sc stop`] (https://ss64.com/nt/sc.html)? AFH 6 лет назад 2
@AFH Спасибо за комментарий. Ну, я хотел бы сохранить весь код внутри самой службы. Во всяком случае, меня просто уволили за то, что я задал этот вопрос на паре других стековых сайтов. Поэтому я думаю, что мой вопрос не подходит для этого форума на 100%, но мне удалось найти решение. Мне нужно было создать новый экземпляр монитора процесса и передать аргумент `/ Terminate`, после чего он изящно останавливает все экземпляры монитора процесса. Örvar 6 лет назад 0
@ Örvar Вы можете [ответить на свой вопрос] (https://superuser.com/help/self-answer) DavidPostill 6 лет назад 1

1 ответ на вопрос

0
Örvar

Мне удалось найти решение. В OnStop()методе службы мне нужно было создать новый экземпляр Process Monitor и передать /Terminateаргумент:

Process process = new Process(); process.FileName = "\Procmon.exe" ; process.StartInfo.Arguments = "/AcceptEula /Terminate"; process.Start(); 

При этом он изящно останавливает все экземпляры Process Monitor .

На каком языке написан этот код? Pimp Juice IT 6 лет назад 0
@PimpJuiceIT C # Я добавил его в качестве тега. Örvar 6 лет назад 0

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