0

我想使用应用程序引擎程序中的人员代码执行批处理文件。但是该程序在将 Exec 代码返回为非零值(Value - 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;

任何帮助如何解决此问题。

4

2 回答 2

1

最好的办法是跟踪执行情况。

想法:

  • 您可以登录正在运行它的进程调度程序并执行脚本好吗?
  • AE 是否在运行时被调度或调用?
  • 您不需要更改目录,因为您使用的是脚本的完全限定路径。
  • 您不需要调用“cmd /c”,因为这将为您的应用程序创建一个额外的 shell 以在其中运行,从而使调试更加困难等。

运行跟踪,并将输出丢给我们。:) HTH

于 2017-01-03T02:20:08.960 回答
1

在脚本内部将工作目录更改为 D: 怎么样?您正在调用两个命令,我想知道 shell 返回给 exec 的是什么。我假设您编写脚本以提供适当的返回码,这不是问题。

我无法从问题文本中看出,但您是否在寻找否定结果,例如 -1?我认为返回码通常是积极的。0 表示成功,其他一些正数表示失败。负数可能是可以接受的,但我想知道 Exec 是否不喜欢负数?

也许 PeopleCode ChDir 函数仍然可以替代一行中的两个命令?我很久没试过了。

另一种让您对流程进行重大控制的替代方法是使用 PeopleCode 中的 java.lang.Runtime.exec:http: //jjmpsj.blogspot.com/2010/02/exec-processes-while-controlling-stdin.html

于 2018-02-01T05:06:46.983 回答