unity 判断进程是否挂了,挂了就重启(打开文件,查找进程,延后几秒调用函数)
代码如下:
void Update() { if (clientScene.msgCount > preMsgCount) //长时间没有得到进程的反馈 { preMsgCount = clientScene.msgCount; recentGetMsgTick = Time.time; } if (Time.time > recentGetMsgTick + maxNoMsg) //长时间没有得到进程的额反馈超过一定时间,说明进程死掉了 { if (CheckProcess(pname)) //进程存在就杀死并重启 { KillProcess(pname); Invoke("StartProcess", 2.0f); //隔2秒再调用该函数 } else //不存在就开启 { StartProcess(); } recentGetMsgTick = Time.time + clientIdleTime; } } /// <summary> /// 开启应用 /// </summary> void StartProcess() { UnityEngine.Debug.Log("打开本地应用"); Application.OpenURL(exe_path); NoteReStart(); } /// <summary> /// 检查应用是否正在运行 /// </summary> bool CheckProcess(string processName) { bool isRunning = false; Process[] processes = Process.GetProcesses(); int i = 0; foreach (Process process in processes) { try { i++; if (!process.HasExited) { if (process.ProcessName.Contains(processName)) { UnityEngine.Debug.Log(processName + "正在运行"); isRunning = true; continue; } else if (!process.ProcessName.Contains(processName) && i > processes.Length) { UnityEngine.Debug.Log(processName + "没有运行"); isRunning = false; } } } catch { UnityEngine.Debug.Log("进程检测异常"); } } return isRunning; } /// <summary> /// 杀死进程 /// </summary> /// <param name="processName">应用程序名</param> void KillProcess(string processName) { Process[] processes = Process.GetProcesses(); foreach (Process process in processes) { try { if (!process.HasExited) { if (process.ProcessName == processName) { process.Kill(); UnityEngine.Debug.Log("已杀死进程"); } } } catch (System.InvalidOperationException) { UnityEngine.Debug.Log("关闭进程异常"); } } }