本帖最后由 peng_hao1988 于 2012-11-14 09:52:24 编辑

解决方案 »

  1.   

    String cmd = "cmd /c psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
    改为
    String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
      

  2.   

    谢谢回复!
    这样弹出了MSDOS界面了,而且结果也没法直接获取到程序中吧,需要写入文件再读取文件中,不过看到希望了,非常感谢!
      

  3.   

    String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\"; 
    这种挑中dos命令的语句最好不要写在一起,先打开界面,再慢慢append命令,这样不会出错。
    打开后输入psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\看能执行部,不行的话再修改
      

  4.   

    一步步来执行是可以,但是每一步都需要认为参与,这样在程序中不好操作呀!还有你刚刚的建议我试了,弹出了MSDOS界面,在界面中结果都出来了,但是无法获取到程序,也无法将结果写入文件,我使用这样修改命令的
    psexec \\10.67.192.212 -u china\liuxhwfe -p xxxxxx cmd /c dir D:\ > D:\rs.txt
    这个命令能产生rs.txt文件,但是文件内什么都没有。
      

  5.   

    没安装这个软件,不负责任的猜测几个可能:
    1、换行符解析差异,这个可以尝试换掉readLine()改成逐个字符读取(read())和原样输出;
    2、出现特殊错误信息了,这个要从 getErrorStream中读取,可以另外起一个独立线程来试试看;
    3、对方等待特定输入,也许默认应发送的比如回车之类的回显信息在JVM这种启动模式下就没了,需要用getOutputStream来尝试输出换行或回车。
    如果还不行,看有时间再装这个东西试试看。
      

  6.   

    好的,谢谢!
    1.这种情况很有可能,我下去试试看;
    2.错误信息我是用ErrorStream中获取的,我的命令都是在DOS下验证过的没问题的,在代码中也用ErrorStream测试过,没有错误信息,所以采用的InputStream。
    3.我的命令中不会有等待输入的情况,远程执行之后就会马上在控制台输出结果。
      

  7.   

    看来还是不行啊?
    其实我挺怀疑是需要对getInputStream()单纯输出一些 换行符的“\n”周末找时间试试看。
      

  8.   


    恩,谢谢!我使用psexec用指定的用户去执行本机的Clearcase命令访问clearcase服务器。当然这个不是问题的关键。使用方法和上面一样,主要是在 psexec 后面执行命令后DOS界面下可以看到交换信息,但是java程序中就不能获取信息了。
      

  9.   

    在使用运行bat文件时,程序不等待结束该如何处理??
    String runBat = "cmd /c start "+batPath;
    Process process = Runtime.getRuntime().exec(runBat);
                    process.waitFor();//程序在这里不等待!!!!
    process.destroy();
      

  10.   


    Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"",null,new File("C:\\WINDOWS\\system32"));
    BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
    String line = null;
    while((line = rs.readLine()) != null){
    System.out.println(line);
    }这段代码在单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息了。到底为什么?
      

  11.   

    总结一下经验,然后结贴!String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
    1.下面DOS命令可以执行,会弹出DOS界面,命令中的输出信息任然无法在java程序中获取,解决办法如下:
    String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\" >> D:\reuslt.txt
    将结果输出到文件,然后通过程序读取文件。2.单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息的问题,是由于没有将环境变量添加到当前进程中(不知道为何JBOSS程序没有将path添加到进程中),解决方法如下:final String[] evn = new String[]{"Path=C:\\windows\\system32;C:\\windows\\;C:\\windows\\System32\\Wbem"};
    ...........
    String line = null;
    do{
    Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"", evn);
    BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
    line = rs.readLine();
    rs.close();
    proc.destroy();
    } while(line != null);3.通过start方法运行的bat文件会单独启动一个进程,即java程序无法获知命令是否已经执行完成。我的解决办法如见2中的代码,就是不停的去查看bat中启动的进程psexec.exe如果该进程不存在了就代表命令已经执行完成。
      

  12.   

    ldh911 这位老兄抱歉,结贴的时候看错了,没把分给你,实在抱歉哈!