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

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

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

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

c#,cmd,windows-services,process-monitor,

0

Ответов: 2


0

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

Вы можете попробовать Именованные каналы ( https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-use-named-pipes-for-network-interprocess -communication )


0

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

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

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

C #, CMD, окна-услуги, процесс-монитор,
Похожие вопросы