目标:远程运行bat文件以满足测试需求。
要求:
情况:
我在Windows 7上运行我的代码作为java应用程序。应用程序创建运行cmd.exe以从本地计算机运行bat的进程。 bat文件包含 psexec 的命令,可以远程运行另一个bat文件。
我尝试了其他方法而没有创建本地bat文件:尝试运行psexec命令,但未能传递超过1个参数。
清单:
public static void main(String[] args) throws IOException,
InterruptedException
{
String[] command = { "cmd", };
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("cd C:\\Autotests\\Bat\\");
stdin.println(".\\localBat.bat");
// write any other commands you want here
stdin.close();
int returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);
}
public static class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm)
{
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run()
{
try
{
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1;)
{
ostrm_.write(buffer, 0, length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
localBat.bat的内容:
C:\\PSTools\\psexec.exe \\**.**.**.** -s -u domain\user -p password C:\somepath\remoteBat.bat
有什么问题?
如果我从命令行手动运行localBat.bat,我会在控制台中显示remoteBat.bat的所有输出。但是当我运行我的应用程序时,remoteBat.bat运行,我得到了退出代码stroed但我没有得到整个输出,只有这些行:
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
Connecting to **.**.**.**...
Starting PSEXESVC service on **.**.**.**...
Connecting with PsExec service on **.**.**.**...
Starting C:\somepath\remoteBat.bat on **.**.**.**...
C:\somepath\remoteBat.bat exited on **.**.**.** with error code 0.
影响
当退出代码与0不同时,我无法处理和分析情况。
拜托,帮助我,我被困在这里。