2

我正在执行这样的过程:

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 和我的应用程序)。我也尝试发送 Environment 值,但我只能在 child 中获取它(而不是设置!)。

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

4

1 回答 1

4

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

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

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

如果不能使用控制台,又想返回文本数据,可以使用命名管道进行进程间通信。父程序创建管道并调用子程序。子进程在退出前打开管道并将数据库发送给父进程。

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

于 2013-07-03T15:02:47.847 回答