一、简介
下面将介绍Process的几个例子。
1、 Process相关代码例子1。
这是从别人博客拷贝下来的,非常典型的一段,我忘记出自哪里了。我之所以选择这段代码,因为这段代码包含了process.StartInfo.Arguments。下面先把这代码拷贝:
private void ProgressCheck(object sender, EventArgs e)
{
string strCheck = System.Environment.CurrentDirectory + "\\ProgressCheck\\ProgressCheck.exe";
string TaskPollExePath = System.Environment.CurrentDirectory + "\\TaskPoll.exe";
string CreFusXmlExePath = System.Environment.CurrentDirectory + "\\CreFusXml.exe";
string CoordConvertTaskExePath = System.Environment.CurrentDirectory + "\\CoordCvt\\CoordConvertTask.exe";
string GCSConvertExePath = System.Environment.CurrentDirectory + "\\CoordCvt\\GCSConvert.exe";
string CreFusCheckPrjExePath = System.Environment.CurrentDirectory + "\\FusCheck\\CreFusCheckPrj.exe";
string ProTskExePath = System.Environment.CurrentDirectory + "\\FusCheck\\TskExe\\ProTsk.exe";
string MDomSupQuaChkExePath = System.Environment.CurrentDirectory + "\\FusCheck\\KnlExe\\MDomSupQuaChk.exe";
Process process1 = CreateProcessTasks(strCheck, TaskPollExePath, true);
process1.Start();
process1.WaitForExit();//等待该进程退出,退出前阻塞。
if (process1.ExitCode != 0)
{
MessageBox.Show(TaskPollExePath, "程序异常");
return;
}
Process process2 = CreateProcessTasks(strCheck, CreFusXmlExePath, true);
process2.Start();
process2.WaitForExit();
if (process2.ExitCode != 0)
{
MessageBox.Show(CreFusXmlExePath, "程序异常");
return;
}
Process process3 = CreateProcessTasks(strCheck, CoordConvertTaskExePath, true);
process3.Start();
process3.WaitForExit();
if (process3.ExitCode != 0)
{
MessageBox.Show(CoordConvertTaskExePath, "程序异常");
return;
}
Process process4 = CreateProcessTasks(strCheck, GCSConvertExePath, true);
process4.Start();
process4.WaitForExit();
if (process4.ExitCode != 0)
{
MessageBox.Show(GCSConvertExePath, "程序异常");
return;
}
Process process5 = CreateProcessTasks(strCheck, CreFusCheckPrjExePath, true);
process5.Start();
process5.WaitForExit();
if (process5.ExitCode != 0)
{
MessageBox.Show(CreFusCheckPrjExePath, "程序异常");
return;
}
Process process6 = CreateProcessTasks(strCheck, ProTskExePath, true);
process6.Start();
process6.WaitForExit();
if (process6.ExitCode != 0)
{
MessageBox.Show(ProTskExePath, "程序异常");
return;
}
Process process7 = CreateProcessTasks(strCheck, MDomSupQuaChkExePath, true);
process7.Start();
process7.WaitForExit();
if (process7.ExitCode != 0)
{
MessageBox.Show(MDomSupQuaChkExePath, "程序异常");
return;
}
MessageBox.Show("程序无异常", "提示");
return;
}
private Process CreateProcessTasks(string exe_path, string str_arguments, bool b_create_win = true)
{
Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = exe_path;
process.StartInfo.Arguments = str_arguments;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = false; //true
process.StartInfo.RedirectStandardOutput = false; //true
process.StartInfo.RedirectStandardError = false;
process.StartInfo.CreateNoWindow = b_create_win;
return process;
}
2、Process相关代码例子2。
我们继续把第二个例子的代码拷贝下来。
const string queueName = @".\Private$\FaceSendQueueMsg";
System.Diagnostics.Process.Start(Environment.CurrentDirectory + "\\FaceRecognition" + "\\IDFaceDemo.exe");
MessageQueue queue;
if (MessageQueue.Exists(queueName))//消息队列queueName存在,直接获取这个消息队列的消息
{
queue = new MessageQueue(queueName);
System.Messaging.Message msg = queue.Receive();
string str = msg.Body.ToString();
MessageBox.Show("你收到的消息是:{0}", str);
}
else //消息队列queueName不存在,就创建一个新的,并获取这个消息队列的消息
{
queue = MessageQueue.Create(queueName);
System.Messaging.Message msg = queue.Receive();
string str = msg.Body.ToString();
MessageBox.Show("你收到的消息是:{0}", str);
}
3、Process相关代码例子3。
我们继续把第三个例子的代码拷贝下来。
System.Diagnostics.Process.Start(Environment.CurrentDirectory + "\\FaceRecognition" + "\\IDFaceDemo.exe");
const string queueName = @".\Private$\FaceSendQueueMsg";
MessageQueue mq = null;
if (!MessageQueue.Exists(queueName))
{
mq = MessageQueue.Create(queueName);
Console.WriteLine("创建消息队列完成:" + queueName);
}
else
{
mq = new MessageQueue(queueName);
}
mq.SetPermissions("Administrator", MessageQueueAccessRights.FullControl);
mq.SetPermissions("ANONYMOUS LOGON", MessageQueueAccessRights.FullControl);
mq.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
mq.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
Message message = mq.Receive();
string strRx = message.Body.ToString();
System.Windows.Forms.MessageBox.Show(strRx);
二、代码分析
1、以上代码都利用了Process
2、 process.StartInfo.Arguments = str_arguments;表示启动对应的str_arguments进程。比如可以这样设置ps.Arguments = "-s -t 0";来关闭、重启你计算计算。
3、mq.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });是默认的接收方式,可以接收任何对象,并将给对象转成字符串。
4、以上关于在C#中,创建、发送、接收消息队列,是完全没有的,不会出现错误。但是,如果你用C++创建一个消息队列并发送消息到该队列中。然后用C#读取该消息。这正是我想要进一步解说或想弄明白的内容。
更多推荐
c# 消息队列(三)c# 消息队列的Process使用方法: 重点介绍process.StartInfo.Arguments
发布评论