Проблема при выполнении пакетного файла с использованием PeopleCode в программе Application Engine

#peoplesoft #peoplesoft-app-engine

#peoplesoft #peoplesoft-app-engine

Вопрос:

Я хочу выполнить пакетный файл с использованием People code в программе Application Engine. Но у программы возникла проблема с возвратом кода Exec в виде ненулевого значения (значение — 1).

Ниже приведен фрагмент кода people.

 Global File amp;FileLog; 

Global string amp;LogFileName, amp;Servername, amp;commandline; 
Local string amp;Footer; 

If amp;Servername = "PSNT" Then 

    amp;ScriptName = "D: amp;amp; D:psoftPT854appservprcsRNBatchFile.bat"; 

End-If; 

amp;commandline = amp;ScriptName; 

/* Need to commit work or Exec will fail */ 
CommitWork(); 

amp;ExitCode = Exec("cmd.exe /c " | amp;commandline, %Exec_Synchronous   %FilePath_Absolute); 

If amp;ExitCode <> 0 Then 
MessageBox(0, "", 0, 0, ("Batch File Call Failed! Exit code returned by script was " | amp;ExitCode)); 
End-If;
  

Любая помощь, как решить эту проблему.

Комментарии:

1. Почему вы делаете amp;ScriptName = "D: amp;amp; D:psoftPT854appservprcsRNBatchFile.bat"; вместо amp;ScriptName = "D:psoftPT854appservprcsRNBatchFile.bat";

2. Я хочу изменить каталог на общий диск и выполнить скрипт.

3. Вы должны быть в состоянии сделать amp;exitCode = Exec("D:psoftPT854appservprcsRNBatchFile.bat", %Exec_Synchronous %FilePath_Absolute); , я думаю "D: amp;amp; D:psoft.." , синтаксически недопустимо, что вызывает вашу ошибку.

4. Таким образом, нет необходимости предоставлять cmd.exe /с?

5. Я попытался использовать следующее: amp;ExitCode = Exec(«D:psoftPT854appservprcsRNBatchFile.bat «, %Exec_Synchronous %FilePath_Absolute); Но это не сработало. Я увидел сообщение — Ошибка вызова пакетного файла! Код выхода, возвращенный скриптом, был равен 2

Ответ №1:

Лучше всего выполнить трассировку выполнения.

Мысли:

  • Можете ли вы войти в планировщик процессов, на котором вы запускаете это, и выполнить скрипт НОРМАЛЬНО?
  • AE планируется или вызывается во время выполнения?
  • Вам не нужно менять каталог, поскольку вы используете полный путь к скрипту.
  • вам не нужно вызывать «cmd / c», поскольку это создаст дополнительную оболочку для запуска вашего приложения, усложнит отладку и т. Д.

Запустите трассировку и отправьте нам результат. 🙂 HTH

Ответ №2:

Как насчет изменения рабочего каталога на D: внутри скрипта вместо этого? Вы вызываете две команды, и мне интересно, что оболочка возвращает в exec. Я предполагаю, что вы написали свой скрипт для предоставления соответствующего кода возврата, и это не проблема.

Я не мог сказать из текста вопроса, но вы ищете отрицательный результат, например, -1? Я думаю, что коды возврата обычно положительные. 0 для успеха, какое-то другое положительное число для сбоя. Отрицательные числа могут быть приемлемыми, но мне интересно, не нравится ли Exec отрицательные числа?

Возможно, функция ChDir PeopleCode все еще работает как альтернатива двум командам в одной строке? Я давно не пробовал.

Другой альтернативой, которая дает вам значительный контроль над процессом, является использование java.lang.Runtime.exec из PeopleCode: http://jjmpsj.blogspot.com/2010/02/exec-processes-while-controlling-stdin.html .