我要实现的功能是:有两个进程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发出的指令并返回相应指令的代码。请各位大牛不吝赐教。
string path = “B.exe 参数1 参数2 参数3";
B的main方法里面 static void Main(string[] args) 你传入参数在args里面 你试试?
没写过B/S的 目测可以
我知道在工程的属性里面命令行参数里面写入参数,比如“Update”,args里面就有参数了;但像我上面提到的通过重定向的方法传过来的参数好像不行啊,
觉得麻烦,直接用TCP
.NET的Remoting应该能满足你的要求。
进程间通信的几种方式
1.sokect
2.命名管道
3.共享内存
4.消息队列
你说应该是命名管道吧
用这个:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231(v=vs.85).aspx
B 启动后就执行上面这个方法,.NET 应该有对应的方法。
百度上搜: SendMessage WM_CopyData,这个应该是最简单的
读取本程序的输入流~用这个~
Stream stream = Console.OpenStandardInput(30);//这个在console类里面
stream.read();//这个在stream类里面
非常不建议用这种方式通信,重定向以后对输入流有破坏性,重定向以后的输入流里面变得很奇怪(我一直没搞懂重定向以后里面是啥),反正不是stream.null。