/******************************
* 说明:启动进程、关闭进程操作
* 创建人:龚宇超
* 创建日期: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;
}
}
}