【发布时间】:2018-09-12 10:32:13
【问题描述】:
我们有一个运行单独的 C# EXE 的旧版 VB6 应用程序。 VB6 应用程序依赖于 C# 应用程序来执行特定任务。当任务成功完成时,它将返回退出代码 0,如果失败则返回 1。
这在我们的开发机器上运行良好(是的,我们在不止一台机器上进行了尝试)。但是,当我们在客户端机器上尝试它时,无论任务结果如何,它总是返回 0 退出代码。
真正奇怪的是,这个场景已经完美运行了大约 8 个月,直到第一次发生。
我们甚至尝试制作一个简单的 C#“运行器应用程序”,它只调用一个 exe 并捕获其退出代码。同样,它在我们的开发机器上运行良好,但在客户端机器上总是返回 0。因此,我们得出结论,问题不在 VB6 程序中。
这是调用 .exe 程序的 C# 'runner app' 代码 sn-p:
System.Diagnostics.Process installProcess = new System.Diagnostics.Process();
installProcess.StartInfo.FileName = this.textBox1.Text;
installProcess.StartInfo.Arguments = this.textBox2.Text;
installProcess.Start();
installProcess.WaitForExit();
MessageBox.Show("Exit code : " + installProcess.ExitCode.ToString());
这是使用自定义退出代码退出程序的 C# 代码 sn-p:
Environment.Exit(1);
好吧,我们怀疑客户端机器操作系统上的某些配置会导致客户端机器上出现这种奇怪的行为。
【问题讨论】:
-
您是否尝试过使用无效参数从命令提示符直接运行其他应用程序并验证返回码为 1?
-
你能描述一下如何验证它吗?
-
echo %errorlevel%是一种方式。 -
Environment.Exit(1);通常不是退出带有返回码的 exe 的首选方式;通常你应该放松到你的static int Main()方法,简单地使用return 0;或return 1;(也许这个在catch块内)——如果不尝试就很难知道这是否是原因。 -
我们通过设置
Environment退出代码属性Environment.ExitCode = 1解决了这个问题,这是一种可接受的方式吗?