/// <summary>
/// 以杀死进程的方式杀死explorer
/// </summary>
/// <param name="name">要杀死的进程友好名(无 .exe)</param>
static public void killProcess(string name)
{
try
{
Process[] myProcesses = Process.GetProcesses();
foreach (Process myProcess in myProcesses)
{
if (name == myProcess.ProcessName)
myProcess.Kill();
}
}
catch (Exception ee)
{
//抛出异常
MessageBox.Show(ee.Message);
}
}
//static public void cmdkill(string name)
//{
// string str = @"taskkill /f /im explorer.exe";
// Process p = new Process(); //建立外部调用线程
// p.StartInfo.FileName = "ffmpeg.exe"; //要调用外部程序的绝对路径
// p.StartInfo.Arguments = str; //参数(这里就是FFMPEG的参数了)
// p.StartInfo.UseShellExecute = false; //不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)
// p.StartInfo.RedirectStandardError = true; //把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...mencoder就是用standardOutput来捕获的)
// p.StartInfo.CreateNoWindow = true; //不创建进程窗口
// p.ErrorDataReceived += new DataReceivedEventHandler(Output); //外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN
// p.Start(); //启动线程
// p.BeginErrorReadLine(); //开始异步读取
// p.WaitForExit(); //阻塞等待进程结束
// p.Close(); //关闭进程
// p.Dispose(); //释放资源
// //return true;
//}
#region 第一种运行CMD的方式
/// <summary>
/// 调用CMD命令来杀死或重启进程
/// </summary>
/// <param name="a">杀死或重启进程</param>
/// <returns>cmd命令返回</returns>
public static string cmdkill(bool a)
{
string str;
//string str = Console.ReadLine();
if (a)
{
str = @"taskkill /f /im explorer.exe";
}
else
{
//str = @"C:Windowsexplorer.exe";
str = @"explorer.exe";
}
Process p = new Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
p.StartInfo.CreateNoWindow = true; //不显示程序窗口
p.Start(); //启动程序
//向cmd窗口发送输入信息
p.StandardInput.WriteLine(str + "&exit");
//p.StandardInput.WriteLine(str);
p.StandardInput.AutoFlush = true;
//p.StandardInput.WriteLine("exit");
//向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
//同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令
//获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();//等待程序执行完退出进程
p.Close();
return output;
}
#endregion
#region 第二种运行CMD的方式
/// <summary>
/// 运行cmd命令
/// 会显示命令窗口
/// </summary>
/// <param name="cmdExe">指定应用程序的完整路径</param>
/// <param name="cmdStr">执行命令行参数</param>
static bool RunCmd(string cmdExe, string cmdStr)
{
bool result = false;
try
{
using (Process myPro = new Process())
{
//指定启动进程是调用的应用程序和命令行参数
ProcessStartInfo psi = new ProcessStartInfo(cmdExe, cmdStr);
myPro.StartInfo = psi;
myPro.Start();
myPro.WaitForExit();
result = true;
}
}
catch
{
}
return result;
}
/// <summary>
/// 运行cmd命令
/// 不显示命令窗口
/// </summary>
/// <param name="cmdExe">指定应用程序的完整路径</param>
/// <param name="cmdStr">执行命令行参数</param>
static bool RunCmd2(string cmdExe, string cmdStr)
{
bool result = false;
try
{
using (Process myPro = new Process())
{
myPro.StartInfo.FileName = "cmd.exe";
myPro.StartInfo.UseShellExecute = false;
myPro.StartInfo.RedirectStandardInput = true;
myPro.StartInfo.RedirectStandardOutput = true;
myPro.StartInfo.RedirectStandardError = true;
myPro.StartInfo.CreateNoWindow = true;
myPro.Start();
//如果调用程序路径中有空格时,cmd命令执行失败,可以用双引号括起来 ,在这里两个引号表示一个引号(转义)
string str = string.Format(@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit");
myPro.StandardInput.WriteLine(str);
myPro.StandardInput.AutoFlush = true;
myPro.WaitForExit();
result = true;
}
}
catch
{
}
return result;
}
#endregion