c#如何使⽤Process类执⾏程序,打开⽂件⽂件夹http地址前⾔
Process 类主要有两个⽤途,⼀是当个uri启动器,直接打开相关联的软件。⼆是执⾏程序并监视其输出
1. uri启动器
这⾥简单介绍下什么是uri,注意,我本⼈没学过这玩意,所以我只能说说个⼈理解
你可以把他看成⼀个地址协议定义规则,具体规则如下
xxx:yyy
xxx是协议名
yyy是协议内容或者称协议参数
常见的uri地址有下⾯⼏种
名称协议⽰例
http
mailto
file file:///d:/xxx/
ok,介绍完了,开始正⽂
想启动⼀个uri地址还是⽐较⽅便的
简单⽅法
Process.Start("", "uri").Close();
⾼级⽅法
using (var process = new Process())
{
process.StartInfo.FileName = "uri";
process.StartInfo.UseShellExecute = true;
process.Start();
}
2. 执⾏程序并监视其输出
这个就有点复杂了,不像上⾯⼏⾏代码就成了,这次有三部分代码
⾸先是配置⽅法
private static Process _exeProcess;
private static void SetUpExeProcess(string exeName, string args)
{
if (_exeProcess != null)
return;
_exeProcess = new Process();
_exeProcess.StartInfo.FileName = exeName;
_exeProcess.StartInfo.Arguments = args;
_exeProcess.StartInfo.CreateNoWindow = true;  // 不显⽰窗⼝
_exeProcess.StartInfo.WorkingDirectory = "";  // 设置⼯作⽬录
_exeProcess.StartInfo.Environment.Add("key", "value");  // 添加环境变量
// 是否使⽤ 执⾏命令。
// 如需监听输出,请设置为false,原因如下:
// 若为true,那么就基本等同下⾯两⾏代码
// _exeProcess.StartInfo.FileName = ""
// _exeProcess.StartInfo.Arguments = exeName;
_exeProcess.StartInfo.UseShellExecute = false;
/
/ 启⽤标准输出,异常输出监听⽀持
_exeProcess.StartInfo.RedirectStandardOutput = true;
_exeProcess.StartInfo.RedirectStandardError = true;
// 启⽤ Exited 事件⽀持
_exeProcess.EnableRaisingEvents = true;
_exeProcess.OutputDataReceived += ExeProcess_OutputDataReceived;
_exeProcess.ErrorDataReceived += ExeProcess_ErrorDataReceived;
_exeProcess.Exited += ExeProcess_Exited;
// {
// 启⽤标准输⼊流⽀持
// _exeProcess.StartInfo.RedirectStandardInput = true;
/
/ 标准输⼊流的写⼊⽅法
// _exeProcess.StandardInput.Write("");
// _exeProcess.StandardInput.WriteLine("");
// }
}
private static void ExeProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToShortTimeString() + "\t" + e.Data);
}
private static void ExeProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToShortTimeString() + "\t" + e.Data);
}
可能有细⼼的读者会发现少了⼀个退出事件的处理⽅法,放⼼,在后⾯放着呢接着是启动
private static void StartExeProcess()exited
{
if (_exeProcess == null)
return;
_exeProcess.Start();
// 开启消息监听
_exeProcess.BeginOutputReadLine();
_exeProcess.BeginErrorReadLine();
}
最后是停⽌
private static void StopExeProcess()
{
if (_exeProcess == null)
return;
// ⽴即关闭关联进程
_exeProcess.Kill();
//// 如果要关闭的是gui程序,最好⽤下⾯这个⽅法
// _exeProcess.CloseMainWindow();
}
private static void ExeProcess_Exited(object sender, EventArgs e)
{
// 取消消息监听
_exeProcess.CancelOutputRead();
_exeProcess.CancelErrorRead();
_exeProcess.OutputDataReceived -= ExeProcess_OutputDataReceived;
_exeProcess.ErrorDataReceived -= ExeProcess_ErrorDataReceived;
_exeProcess.Exited -= ExeProcess_Exited;
_exeProcess.Close();
_exeProcess = null;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。