error when executing bat from a program in c #

0

Good I have the following bat, that I execute directly and it works without problems:

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\%CurVer%" /v JavaHome') DO set JAVA_HOME=%%B
echo JAVA_HOME: %JAVA_HOME%
SET JAVA=%JAVA_HOME%\bin\javaw.exe
echo JAVA: %JAVA%

The problem arises when I execute it from a program in c #, the function is the following:

        Process proc = null;
        proc = new Process();

        proc.StartInfo.FileName = bat;
        proc.StartInfo.Arguments = String.Format("{0} {1} {2}", Xmx, Xmn, NAME);
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(proc.StartInfo.FileName);
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.RedirectStandardError = true;
        proc.Start();

        string procOutput = proc.StandardOutput.ReadToEnd();
        string procError = proc.StandardError.ReadToEnd();

        TextWriter outputlog = new StreamWriter(System.IO.Path.Combine(Directory.GetCurrentDirectory(), "instancias\pruebas\.minecraft\log.txt"));
        outputlog.Write(procOutput);
        outputlog.Close();

        TextWriter outputerror = new StreamWriter(System.IO.Path.Combine(Directory.GetCurrentDirectory(), "instancias\pruebas\.minecraft\error.txt"));
        outputerror.Write(procError);
        outputerror.Close();

The log it provides when executing from the program in c #:

SET BASE=.\ 
FOR /F "skip=2 tokens=2*" %A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%B 
FOR /F "skip=2 tokens=2*" %A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\" /v JavaHome') DO set JAVA_HOME=%B 
echo JAVA_HOME:  
JAVA_HOME: 
SET JAVA=\bin\javaw.exe 
JAVA: \bin\javaw.exe

I do not know why the FOR should stop working when it is executed from a program in c # Thank you very much and greetings

    
asked by Kaiserdj 24.03.2018 в 22:55
source

1 answer

0

to see if this works for you:

ProcessStartInfo processInfo;
Process process;

processInfo = new ProcessStartInfo("cmd.exe", "/c " + bat);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);
process.WaitForExit();
    
answered by 25.03.2018 в 01:41