Проблема при выполнении командного файла с использованием PeopleCode в программе Application Engine
Я хочу выполнить командный файл, используя код People в программе Application Engine. Но в программе есть проблема, возвращающая код Exec в виде ненулевого значения (значение - 1).
Ниже приведен фрагмент кода ниже.
Global File &FileLog;
Global string &LogFileName, &Servername, &commandline;
Local string &Footer;
If &Servername = "PSNT" Then
&ScriptName = "D: && D:\psoft\PT854\appserv\prcs\RNBatchFile.bat";
End-If;
&commandline = &ScriptName;
/* Need to commit work or Exec will fail */
CommitWork();
&ExitCode = Exec("cmd.exe /c " | &commandline, %Exec_Synchronous + %FilePath_Absolute);
If &ExitCode <> 0 Then
MessageBox(0, "", 0, 0, ("Batch File Call Failed! Exit code returned by script was " | &ExitCode));
End-If;
Любая помощь, как решить эту проблему.
2 ответа
Лучше всего сделать след исполнения.
Мысли:
- Можете ли вы войти в планировщик процессов, на котором вы это выполняете, и выполнить сценарий ОК?
- AE планируется или вызывается во время выполнения?
- Вам не нужно менять каталог, так как вы используете полный путь к скрипту.
- вам не нужно вызывать "cmd / c", так как это создаст дополнительную оболочку для вашего приложения для запуска, усложнит отладку и т. д.
Запустите трассировку и отправьте нам вывод.:) HTH
А как насчет замены рабочего каталога на D: внутри скрипта? Вы вызываете две команды, и мне интересно, что оболочка возвращает exec. Я предполагаю, что вы написали свой скрипт, чтобы дать соответствующий код возврата, и это не проблема.
Я не могу сказать по тексту вопроса, но вы ищете отрицательный результат, например -1? Я думаю, что коды возврата обычно положительные. 0 для успеха, другое положительное число для неудачи. Отрицательные числа могут быть приемлемы, но мне интересно, если Exec не любит отрицательные числа?
Возможно, функция PeopleCode ChDir по-прежнему работает как альтернатива двум командам в одной строке? Я не пробовал это долгое время.
Другой альтернативой, которая дает вам значительный контроль над процессом, является использование java.lang.Runtime.exec от PeopleCode: http://jjmpsj.blogspot.com/2010/02/exec-processes-while-controlling-stdin.html while-controlling-stdin.html.