我在c#中执行.bat文件时无法获取输出

时间:2014-03-11 08:39:27

标签: c# java batch-file process java-home

我试图从c#调用.bat文件。 我的项目名称是 这里是代码MaestroStart,批处理文件具有相同的名称。他们都在同一个目录。

   private void button1_Click(object sender, EventArgs e)
        {
            Process p = new Process();  
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;            
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.FileName = @"C:\Program Files (x86)\mbmteks\Maestro\MaestroStart.bat";
            p.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\mbmteks\Maestro\MaestroStart\MaestroStart\bin\Debug";
            p.Start();

            //string output = p.StandardError.ReadToEnd();
            string output = p.StandardOutput.ReadToEnd();
            textBox2.Text = output;


            p.WaitForExit();

        }

但这是我得到的唯一输出: (" JAVA_HOME不指向JDK或JRE。设置JAVA_HOME环境变量或为IDEA项目指定JDK。")。 如果使用此声明

string output = p.StandardError.ReadToEnd();

我屏幕上什么都没有。

我尝试将Jave-Home环境变量重置为我正在使用的所有目录,但没有任何变化。

这是批处理文件的代码:

@echo off
setlocal

Set JAVA_HOME=.\jre

if exist "%JAVA_HOME%\bin\java.exe" goto JavaFound
echo "JAVA_HOME does not point at a JDK or JRE.  Either set the JAVA_HOME environment variable or specify a JDK for your IDEA project."
goto End

:JavaFound
if exist "start.jar" goto StartJarFound
echo "start.jar was not found.  Check your Jetty installation or your app path."
goto End

:StartJarFound
%JAVA_HOME%\bin\java.exe -jar start.jar

:End

这是我直接运行时批处理文件的输出:

警告:已设置系统属性和/或JVM参数。考虑使用--dry-run或--e XEC 2014-03-11 13:35:51.964:INFO:oejs.Server:jetty-8.1.12.v20130726 2014-03-11 13:35:51.998:INFO:oejdp.ScanningAppProvider:部署监视器C:\ Pro 间隔为1的gram文件(x86)\ mbmteks \ Maestro \ webapps 2014-03-11 13:35:52.010:INFO:oejd.DeploymentManager:可部署添加:C:\ Program  文件(x86)\ mbmteks \ Maestro \ webapps \ ROOT log4j:WARN org.apache.log4j.DailyRollingFileAp中没有这样的属性[maxFileSize] 彭德。 log4j:WARN org.apache.log4j.DailyRollingFil中没有这样的属性[maxBackupIndex] eAppender。 2014-03-11 13:36:00.540:INFO:ROOT:初始化Spring root WebApplicationContext

2014-03-11 13:36:03.274:INFO:ROOT:初始化Spring FrameworkServlet' springDi spatcher' 2014-03-11 13:36:03.647:INFO:oejdp.ScanningAppProvider:部署监视器C:\ Pro 间隔为1的gram文件(x86)\ mbmteks \ Maestro \ contexts 2014-03-11 13:36:03.671:INFO:oejs.AbstractConnector:已启动SelectChannelConnect or@0.0.0.0:9999

我的工作目录是否正确?我的意思是,它应该是我当前项目的目录??

1 个答案:

答案 0 :(得分:0)

 //to excute bat file in java 
Runtime runtime = Runtime.getRuntime();
    try {
        Process p1 = runtime.exec("cmd /c GO.BAT", null, new File("D:\\Documents and        Settings\\Administrator\\Desktop\\bat"));
          InputStream is = p1.getInputStream();
     int i = 0;
        while( (i = is.read() ) != -1) {
           System.out.print((char)i);
        }
   } catch(IOException ioException) {
        System.out.println(ioException.getMessage() );
    }