这是情况。我们有一个非常旧的 COBOL exe,只能在 Windows XP 上运行。为了运行这个 exe,我们设置了一个虚拟 XP 机器。用户每周都会运行一系列 BAT 文件。
我正在尝试编写一个将在 VM 上运行然后执行 COBOL exe 的 C# Windows 应用程序。计划是使用 Process.Start 来调用 EXE。如果 MY WINDOWS C# EXE 与 COBOL exe 在同一目录中运行,一切正常。
当我将 C# exe 移出文件夹时,我得到一个错误的返回码,并且 cobol 没有被执行。
无需赘述,我希望能够从文件夹外部运行 COBOL。原因是我们有几个区域办事处,每个办事处都有自己的文件夹和每个文件夹内的 cobol exe 副本。这里的目标是让用户选择每个区域办事处,然后 C# 程序将执行每个目录中的每个程序。
总之。如果我在 COBOL exe 所在的文件夹中运行 C#,它就可以工作。但是,如果我将 C# 移出该文件夹,则不会
我希望这一切都有意义。以下是一些额外的细节:
- 在 Visual Studio 2012 中作为 C# Windows 应用程序创建
- 平台目标 x86(我也使用过 Any CPU)
- 目标框架 .NET Framework 4
- COBOL 是 1997 年的 Microfocus(是的,我知道。我们需要摆脱它)
- 虚拟机是 Windows XP
- 如果我将 exe 更改为记事本,它运行良好
如果我确实从 Windows 开始运行并粘贴:K:\AMSapp\MYTESTFOLDER\AMSBLD.exe它运行良好。
按钮单击事件的 C# 代码(注意:如果我将文件名更改为此 K:\AMSapp\MYTESTFOLDER\AMSBLD.exe 我得到相同的结果。它不运行)此外,消息框显示 255 时返回代码不起作用。如果将 C# 程序移动到 cobol 文件夹内,则返回零。
private void button1_Click(object sender, EventArgs e) { try { int exitCode; Process process = new Process(); process.StartInfo.FileName = @"\\SERVER23021\PRODDATA\AMSapp\MYTESTFOLDER\AMSBLD.exe"; process.StartInfo.ErrorDialog = true; process.Start(); process.WaitForExit(1000 * 60 * 5); // Wait up to five minutes. exitCode = process.ExitCode; MessageBox.Show("My exit code = " + exitCode.ToString()); MessageBox.Show("my path and file name: " + process.StartInfo.FileName); } catch (Exception ex) { MessageBox.Show(ex.Message); } }