我正在尝试运行一个powershell命令来启动tomcat服务。当前,当直接通过Windows powershell执行该命令时,该命令可以正常工作。但是,如果我从Java运行相同的命令,则会得到错误提示
Start-Process : A positional parameter cannot be found that accepts argument 'net'.
我的powershell命令是:
Start-Process -verb runas cmd -ArgumentList "/k net start Tomcat7"
我的Java代码:
final String PS_COMMAND = " powershell.exe Start-Process -verb runas cmd -ArgumentList /k net start Tomcat7 " ;
Process p= Runtime.getRuntime().exec(PS_COMMAND);
BufferedReader BR=new BufferedReader(new InputStreamReader(p.getInputStream()));
String l;
while((l=BR.readLine()) != null){
System.out.print(l);
}
答案 0 :(得分:0)
我现在看到您正在使用-verb runas
来在需要时强制执行UAC提示。
在那种情况下,这是一个好方法,但是至少您可以删除cmd.exe
间接寻址。它不能按原样工作的原因实际上只是因为您没有引用要传递给-ArgumentList
参数的值。
尝试一下:
final String PS_COMMAND = "powershell.exe Start-Process -verb runas net.exe -ArgumentList 'start Tomcat7'" ;
您使事情变得过于复杂。没有理由运行powershell.exe
来运行cmd.exe
来运行net.exe
。
您应该执行以下一项操作:
运行PowerShell的命令:
final String PS_COMMAND = "powershell.exe Start-Service Tomcat7" ;
或直接运行net.exe
:
final String PS_COMMAND = "net.exe start Tomcat7" ;