/// <summary>
/// 启动进程
/// </summary>
/// <param name="path">路径</param>
private void StartProcesses(string path)
{
try
{
if (path != "")
{
Process.Start(path);
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 关闭进程
/// </summary>
/// <param name="path">路径</param>
private void StopProcesses(string path)
{
try
{
if (path != "")
{
string name = Path.GetFileNameWithoutExtension(path);
//根据名字关闭相关进程
Process[] p = Process.GetProcessesByName(name);
for (int i = 0; i < p.Length; i++)
{
p[i].Kill();
p[i].WaitForExit();
}
}
}
catch (Exception ex)
{
}
}
或许有些程序用上面的StopProcesses方法,关闭不完全,从网上参考了cmd命令关闭程序
/// <summary>
/// 运行DOS命令
/// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public string RunCmd(string command)
{
//实例一个Process类,启动一个独立进程
System.Diagnostics.Process p = new System.Diagnostics.Process();
//Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,下面我们用到了他的几个属性:
p.StartInfo.FileName = "cmd.exe"; //设定程序名
p.StartInfo.Arguments = "/c " + command; //设定程式执行參數
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输入
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = true; //设置不显示窗口
p.Start(); //启动
//p.StandardInput.WriteLine(command); //也可以用这种方式输入要执行的命令
//p.StandardInput.WriteLine("exit"); //不过要记得加上Exit要不然下一行程式执行的时候会当机
return p.StandardOutput.ReadToEnd(); //从输出流取得命令执行结果
}
有了这个方法,我们就可以尝试根据进程ID来关闭进程了,可以这样关闭程序
/// <summary>
/// CMD命令关闭程序
/// </summary>
/// <param name="path">路径</param>
private void CmdCloseProcess(string path)
{
if (path != "")
{
string name = Path.GetFileNameWithoutExtension(path);
Process[] p = Process.GetProcessesByName(name);
foreach (Process pre in p)
{
int id = pre.Id;
this.RunCmd("taskkill /pid " + id);
}
}
}