首页 新闻 搜索 专区 学院

C# 如何通过重定向实现进程之间的通信?

0
悬赏园豆:50 [待解决问题]

我要实现的功能是:有两个进程A和B,A通过<重定向-管道>(这个地方也不知道该咋说)向B发送指令“Update”,B在后台执行,不弹出窗口,B接收到A的指令后执行相应的功能,然后再给A发送一个回复指令。我只知道A进程给B发出指令和接收其指令可以这样写:

Process vProcess = new Process();
            string path = “B.exe";
            vProcess.StartInfo.FileName = path;
            vProcess.StartInfo.UseShellExecute = false;
            vProcess.StartInfo.RedirectStandardInput = true;
            vProcess.StartInfo.RedirectStandardOutput = true;
            vProcess.StartInfo.RedirectStandardError = true;
            vProcess.StartInfo.CreateNoWindow = true;
            vProcess.Start();
            vProcess.StandardInput.WriteLine("Update");//A给B发出的指令
            string str = vProcess.StandardOutput.ReadToEnd();//A读取到B的输出
            Console.WriteLine(str);
            Console.ReadKey();
            vProcess.Close();

但不知道进程B里面怎么写接收A发出的指令并返回相应指令的代码。请各位大牛不吝赐教。

SherryW的主页 SherryW | 初学一级 | 园豆:134
提问于:2014-03-13 16:23
< >
分享
所有回答(7)
0

string path = “B.exe 参数1 参数2 参数3";
 B的main方法里面 static void Main(string[] args) 你传入参数在args里面  你试试?
没写过B/S的 目测可以

丫的 | 园豆:1575 (小虾三级) | 2014-03-13 16:31

我知道在工程的属性里面命令行参数里面写入参数,比如“Update”,args里面就有参数了;但像我上面提到的通过重定向的方法传过来的参数好像不行啊,

支持(0) 反对(0) SherryW | 园豆:134 (初学一级) | 2014-03-14 10:07
0

觉得麻烦,直接用TCP

【秦时明月】 | 园豆:803 (小虾三级) | 2014-03-13 16:41
0

.NET的Remoting应该能满足你的要求。

水晶途途 | 园豆:1434 (小虾三级) | 2014-03-13 16:46
0

进程间通信的几种方式

1.sokect

2.命名管道

3.共享内存

4.消息队列

你说应该是命名管道吧

吴瑞祥 | 园豆:28846 (高人七级) | 2014-03-13 16:51
0

用这个:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231(v=vs.85).aspx

B 启动后就执行上面这个方法,.NET  应该有对应的方法。

Launcher | 园豆:45045 (高人七级) | 2014-03-13 16:59
0

百度上搜: SendMessage WM_CopyData,这个应该是最简单的

空明流光 | 园豆:62 (初学一级) | 2014-03-14 12:25
0

读取本程序的输入流~用这个~

Stream stream = Console.OpenStandardInput(30);//这个在console类里面

stream.read();//这个在stream类里面

非常不建议用这种方式通信,重定向以后对输入流有破坏性,重定向以后的输入流里面变得很奇怪(我一直没搞懂重定向以后里面是啥),反正不是stream.null。

kiuyam | 园豆:202 (菜鸟二级) | 2015-12-14 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册