c# 消息队列(三)c# 消息队列的Process使用方法: 重点介绍process.StartInfo.Arguments

一、简介

下面将介绍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#读取该消息。这正是我想要进一步解说或想弄明白的内容。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值