【问题标题】:Bubble up exception back to caller when using Process.Start()使用 Process.Start() 时将异常冒泡返回给调用者
【发布时间】:2013-07-25 10:55:43
【问题描述】:

我有一个windows form 应用程序和一个command prompt exe。我正在执行命令提示符,点击 win 表单按钮

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "ConsoleApplication2.exe";
Process.Start(info);

而且我有一些在调用 exe 后执行的按钮单击事件的操作。但我只需要在命令提示符 exe 没有抛出异常的情况下执行。基本上需要的是从exe中冒出异常来取胜。我尝试抛出异常,但由于 exe 和 win from 都是两个不同的应用程序实例,因此不会将异常返回给调用者。有什么方法可以实现吗?

【问题讨论】:

  • 你见过this吗?
  • 谢谢山姆,马上试试。
  • @Sam 运气不好,按钮点击中的后续代码被执行。从 exe 抛出的异常也不会在 win 表单中捕获。

标签: c# winforms process command-prompt


【解决方案1】:

您的代码激活了一个 exe 文件。请注意,您的程序与其他所有程序一样正在返回代码。这个返回码可以通过这样做来实现:

ProcessStartInfo info = new ProcessStartInfo();
     info.FileName = "ConsoleApplication2.exe";
     Process p = Process.Start(info);
     p.WaitForExit();
     int eCode = p.ExitCode;

请不要在主线程中这样做,因为它会停止,直到进程停止。 在您的 ConsoleApplication2.exe 中确保在出现异常的情况下您将返回(在main 函数中)一个代码(数字),表明存在错误。就是这么简单:

  static int Main()
  {
     try
     {
        // My code
     }
     catch (Exception)
     {
        return 5;// Meaning error
     }

     return 0; // all went better then expected!
  }

【讨论】:

  • 任何子线程中的异常都不会被这个 try/catch 块捕获。查看stackoverflow.com/a/878270/1134155
  • 亲爱的@Hemario,这只是一个示例。我不知道他会在 ConsoleApplication2.exe 的代码中做什么,只是他大致了解了他需要做什么
  • @NoIdeaForName: 只是为 OP 添加附加信息
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多