Вот ситуация. У нас есть очень старый исполняемый файл COBOL, который будет работать только в Windows XP. Для запуска этого исполняемого файла мы создали виртуальную машину XP. Каждую неделю пользователь запускает серию BAT-файлов.
Я пытаюсь написать приложение С# для Windows, которое будет работать на виртуальной машине, а затем выполнять COBOL exe. План состоит в том, чтобы использовать Process.Start для вызова EXE. Все работает нормально, ЕСЛИ MY WINDOWS C# EXE запускается в том же каталоге, что и COBOL exe.
Когда я перемещаю исполняемый файл С# из папки, я получаю неверный код возврата, и кобол не выполняется.
Не вдаваясь в подробности, я хочу иметь возможность запускать COBOL из-за пределов папки. Причина в том, что у нас несколько региональных офисов и у каждого своя папка и своя копия cobol exe внутри каждой папки. Цель здесь состоит в том, чтобы позволить пользователю выбрать каждый региональный офис, а затем программа C# выполнит каждую программу в каждом каталоге.
В итоге. Если я запускаю С# внутри папки, где находится исполняемый файл COBOL, ЭТО РАБОТАЕТ. НО, если я перемещаю С# за пределы этой папки, это НЕ
Я надеюсь, что все это имеет смысл. Вот некоторые дополнительные детали:
- Создан в Visual Studio 2012 как приложение C# для Windows.
- Целевая платформа x86 (я также использовал любой процессор)
- Целевая платформа .NET Framework 4
- COBOL — это Microfocus из 1997 года (да, я знаю. Нам нужно избавиться от него)
- ВМ - это 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); } }
process.StartInfo.WorkingDirectory = Path.GetFullPath(process.StartInfo.FileName);
- person L.B   schedule 11.10.2016