using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Diagnostics;
namespace Ping
{
// 1.定义委托
public delegate void DelegateReadResultOutput(string result);
public partial class Form1 : Form
{
// 2.定义委托事件
public event DelegateReadResultOutput ReadResultOutput1;
private readonly string basePath = "";
public Form1()
{
InitializeComponent();
Init();
basePath = AppDomain.CurrentDomain.BaseDirectory;
}
private void Init()
{
//3.将相应函数注册到委托事件中
ReadResultOutput1 += ReadResultOutputAction1;
}
private int i1;
private string dir1;
private void FileCheck(string path)
{
if (!File.Exists(path))
{
File.Create(path).Close();
}
}
public string File1
{
get
{
return dir1 + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
}
}
private Process CmdProcess1;
private void button1_Click(object sender, EventArgs e)
{
dir1 = basePath + textBox1.Text + "\\";
if (!Directory.Exists(dir1))
{
Directory.CreateDirectory(dir1);
}
FileCheck(File1);
button1.Enabled = false;
CmdProcess1 = new Process
{
StartInfo =
{
FileName = "ping.exe",
Arguments = textBox1.Text + " -t",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true
}
};
CmdProcess1.OutputDataReceived += CmdProcess1_OutputDataReceived;
CmdProcess1.EnableRaisingEvents = true; // 启用Exited事件
CmdProcess1.Exited += CmdProcess1_Exited;
CmdProcess1.Start();
CmdProcess1.BeginOutputReadLine();
CmdProcess1.BeginErrorReadLine();
}
private readonly Queue<string> queueResult1 = new Queue<string>(10);
private readonly Queue<string> queueResult2 = new Queue<string>(10);
void CmdProcess1_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
Invoke(ReadResultOutput1, new object[] { e.Data });
}
}
private void ReadResultOutputAction1(string result)
{
richTextBox1.Clear();
if (queueResult1.Count > 8)
{
queueResult1.Dequeue();
}
result = result + " " + DateTime.Now;
queueResult1.Enqueue(result);
foreach (string r in queueResult1)
{
richTextBox1.AppendText(r + Environment.NewLine);
}
i1++;
if (i1 % 5 == 1)
{
FileCheck(File1);
using (TextWriter safewriter1 = TextWriter.Synchronized(new StreamWriter(File1, true)))
{
safewriter1.WriteLine(result);
}
}
}
private void CmdProcess1_Exited(object sender, EventArgs e)
{
FileCheck(File1);
using (TextWriter safewriter1 = TextWriter.Synchronized(new StreamWriter(File1, true)))
{
safewriter1.WriteLine("ping 终止。");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
FileCheck(File1);
using (TextWriter safewriter1 = TextWriter.Synchronized(new StreamWriter(File1, true)))
{
safewriter1.WriteLine("ping 终止。");
}
if (CmdProcess1 != null)
{
CmdProcess1.Kill();
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace CmdCallbackShow
{
// 1.定义委托
public delegate void DelReadStdOutput(string result);
public delegate void DelReadErrOutput(string result);
public partial class Form1 : Form
{
// 2.定义委托事件
public event DelReadStdOutput ReadStdOutput;
public event DelReadErrOutput ReadErrOutput;
public Form1()
{
InitializeComponent();
Init();
}
private void Init()
{
//3.将相应函数注册到委托事件中
ReadStdOutput += new DelReadStdOutput(ReadStdOutputAction);
ReadErrOutput += new DelReadErrOutput(ReadErrOutputAction);
}
private void button1_Click(object sender, EventArgs e)
{
// 启动进程执行相应命令,此例中以执行ping.exe为例
RealAction("ping.exe", textBox1.Text);
}
private void RealAction(string StartFileName, string StartFileArg)
{
Process CmdProcess = new Process();
CmdProcess.StartInfo.FileName = StartFileName; // 命令
CmdProcess.StartInfo.Arguments = StartFileArg; // 参数
CmdProcess.StartInfo.CreateNoWindow = true; // 不创建新窗口
CmdProcess.StartInfo.UseShellExecute = false;
CmdProcess.StartInfo.RedirectStandardInput = true; // 重定向输入
CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出
CmdProcess.StartInfo.RedirectStandardError = true; // 重定向错误输出
//CmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
CmdProcess.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
CmdProcess.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
CmdProcess.EnableRaisingEvents = true; // 启用Exited事件
CmdProcess.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件
CmdProcess.Start();
CmdProcess.BeginOutputReadLine();
CmdProcess.BeginErrorReadLine();
// 如果打开注释,则以同步方式执行命令,此例子中用Exited事件异步执行。
// CmdProcess.WaitForExit();
}
private void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
// 4. 异步调用,需要invoke
this.Invoke(ReadStdOutput, new object[] { e.Data });
}
}
private void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
this.Invoke(ReadErrOutput, new object[] { e.Data });
}
}
private void ReadStdOutputAction(string result)
{
this.textBoxShowStdRet.AppendText(result + "\r\n");
}
private void ReadErrOutputAction(string result)
{
this.textBoxShowErrRet.AppendText(result + "\r\n");
}
private void CmdProcess_Exited(object sender, EventArgs e)
{
// 执行结束后触发
}
}
}
string ProcessName="explorer";//这里换成你需要删除的进程名称
Process[] MyProcess1=Process.GetProcessesByName(ProcessName);
Process MyProcess=new Process();//设定程序名
MyProcess.StartInfo.FileName="cmd.exe";//关闭Shell的使用
MyProcess.StartInfo.UseShellExecute=false;//重定向标准输入
MyProcess.StartInfo.RedirectStandardInput=true;//重定向标准输出
MyProcess.StartInfo.RedirectStandardOutput=true;//重定向错误输出
MyProcess.StartInfo.RedirectStandardError=true;//设置不显示窗口
MyProcess.StartInfo.CreateNoWindow=true;//执行强制结束命令
MyProcess.Start();
MyProcess.StandardInput.WriteLine("ntsd -c q -p "+(MyProcess1[0].Id).ToString());//直接结束进程ID
MyProcess.StandardInput.WriteLine("Exit");
第二种,通过强大的进程类进行标准关闭。
string ProcessName="explorer";//换成想要结束的进程名字
Process[] MyProcess=Process.GetProcessesByName(ProcessName);
MyProcess[0].Kill();