子进程和父进程之间的共享值

时间:2013-07-03 13:20:41

标签: c# process parent-child handle child-process

我正在执行这样的流程:

Process process = new Process();
process.StartInfo = new ProcessStartInfo(localpath);
process.Exited += new EventHandler(process_Exited);
process.EnableRaisingEvents = true;
process.Start();

其中localpath是.docx文件的路径。我还有一个Word加载项,功能区中有一个Import按钮。一旦按下它应设置一些值,让我们说“hi”,一旦退出,process_Exited()方法应该能够:

MessageBox.Show(the mysterious accessor for that "hi");

但是,我不知道这是否可行,因为我发现许多人告诉我如果在另一个进程中我无法访问父表单。所以我放弃了这个想法,我想做的就是将“hi”发送到父表单(在不同的应用程序中),这将足以作为下一步做什么。

我尝试使用这个项目,但我的消息框出现在同一个窗口中,而不是父窗口,因为这些是两个独立的应用程序(WORD和我的应用程序)。我也尝试过发送环境值,但我只能在子节点中获取它(而不是设置!)。

那么,有没有办法让一些值从子进程传递给父进程?

1 个答案:

答案 0 :(得分:4)

有很多方法可以将信息从孩子传递给父母。

如果您的子进程是控制台应用程序,您可以让子进程在控制台上写入值(即Console.WriteLine)。父进程可以重定向子输出并读取它。有关示例,请参阅Capturing console output from a .NET application (C#)

如果您要返回一小组可能的值(即“hi”,“goodbye”,“help”等),那么您可以枚举它们并让子项返回0到N之间的退出代码,其中N是可能值的数量。有关获取进程退出代码的示例,请参阅Get return value from process。要设置子流程退出代码,请设置Environment.ExitCode,或从Main返回值。

如果您无法使用控制台并且想要返回文本数据,则可以使用Named Pipes进行进程间通信。父程序创建管道并调用子程序。子项打开管道并在退出之前将数据库发送给父项。

还有其他可能性,但我怀疑其中一种会做你想做的事。