C#监视外部进程状态

时间:2016-04-14 17:14:56

标签: c# events process

我在Windows上用C#制作一个启动器应用程序。但是,这个过程并不是由我的C#应用​​程序直接启动的,而是使用url来启动它,例如" steam:// rungameid / xxxxxxx"

我需要它以下列方式按名称(例如XYZ.exe)监视进程:

XYZ.exe启动时收到事件 在XYZ.exe退出时接收事件

我只想在应用程序运行且不分别运行时最小化并恢复我的C#应用​​程序表单

感谢

1 个答案:

答案 0 :(得分:1)

制作一个计时器(使用您首选的计时器方法)并每隔'n'毫秒轮询一次(找到最适合您的...我想说最小化/恢复游戏,500毫秒可能是一个好的开始,但是实验),然后你可以使用类似的东西:

 bool processRunning = false;

 void timerTickMethod()
 {
    var procIsRunning = Process.GetProcessesByName("xyz.exe").Any();

    if(procIsRunning && !processRunning)
      ProcessIsStartedEvent(); // or directly minimize your app
    else if(!procIsRuning && processRunning)
      ProcessIsEndedEvent(); // or directly restore your app

    processRunning = procIsRunning;
 }

如果您想确定正在运行的 xyz.exe,您可以将完整路径传递到GetProcessesByName(如果还有其他xyz.exe在您的系统中,它不会混淆您的应用程序)

更新

我是从记忆中写的,所以也许GetProcessesByName只适用于友好名称(没有exe或路径)。

如果是这种情况(我还没试过),你需要完整的路径,你可以这样做:

var procIsRunning = Process.GetProcesses().Any(x => x.MainModule.Filename == @"c:\your\full\path.exe");