/****************************** * 说明:启动进程、关闭进程操作 * 创建人:龚宇超 * 创建日期:2018-02-09 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace Lskj.AutoUpdate { /// /// 启动进程、关闭进程操作 /// public class ProcessManager { /// /// 说明:初始化更新,关闭现有软件 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InitUpdateEnvironment() { if (Exist(ConstModel.ERP_CLIENT)) { CloseExe(ConstModel.LS_ERP_NAME); } CloseExe(ConstModel.CLIENT_NAME); CloseExe(ConstModel.LS_CALL_NAME); CloseExe(ConstModel.LS_ERP_NAME); CloseExe(ConstModel.LS_Mes_NAME); CloseExe(ConstModel.Ls_Notice); } /// /// 说明:启动主程序 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void StartProcess(bool isMes = false) { string path = System.Environment.CurrentDirectory; if (!isMes) { if (!Exist(ConstModel.LS_ERP_NAME)) { StartExe(path, ConstModel.LS_ERP_EXE); } } else { if (!Exist(ConstModel.LS_Mes_NAME)) { StartExe(path, ConstModel.LS_Mes_EXE); } } CloseExe(ConstModel.LS_UPDATE_NAME); } /// /// 说明:启动更新程序 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void StartUpdateProcess(bool isMes = false) { string path = System.Environment.CurrentDirectory; CloseExe(ConstModel.CLIENT_NAME); CloseExe(ConstModel.LS_CALL_NAME); if (!Exist(ConstModel.LS_UPDATE_NAME)) { if (!isMes) { StartExe(path, ConstModel.LS_UPDATE_EXE); } else { StartExe(path, ConstModel.LS_UPDATE_EXE, "1"); } } CloseExe(ConstModel.LS_ERP_NAME); CloseExe(ConstModel.LS_Mes_NAME); CloseExe(ConstModel.Ls_Notice); } /// /// 说明:启动exe绝对路径 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The file path. /// Name of the file.args private void StartExe(string filePath, string fileName, string args = "") { Process proc = new Process(); proc.StartInfo.UseShellExecute = true;//是否使用操作系统外壳程序启动进程 proc.StartInfo.WorkingDirectory = filePath;//启动进程的初始目录 proc.StartInfo.FileName = fileName; if (!string.IsNullOrEmpty(args)) { proc.StartInfo.Arguments = args; } proc.Start(); } /// /// 说明:关闭的exe进程名 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// Name of the executable. public void CloseExe(string exeName) { Process[] arrPro = Process.GetProcessesByName(exeName); int currentProcessId = Process.GetCurrentProcess().Id; foreach (Process pro in arrPro) { try { if (pro.Id == currentProcessId) { Environment.Exit(0); } if (!pro.HasExited) { pro.Kill(); pro.WaitForExit(10000); } } catch { // 关闭失败时继续处理其他进程,后续文件替换阶段会再次检测文件占用。 } finally { try { pro.Dispose(); } catch { } } } //Process[] arrPro = Process.GetProcessesByName(exeName); //foreach (Process pro in arrPro) //{ // try // { // if (!pro.HasExited) // pro.Kill(); // } // catch (Exception ex) // { // // Kill 失败不抛异常,记录日志,更新继续 // //LogHelper.Instance.WriteError("关闭进程 " + exeName + " 失败: " + ex.Message); // } // finally // { // try { pro.Dispose(); } // catch { } // } //} } /// /// 说明:是否存在进程名 /// 创建人:龚宇超 /// 创建日期:2018-02-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// Name of the process. /// true if XXXX, false otherwise. private bool Exist(string processName) { Process[] pro = Process.GetProcessesByName(processName); return pro.Count() > 0; } } }