Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: kaiserdj en 25 Marzo 2018, 15:37 pm



Título: Error al ejecutar bat desde un programa en c#
Publicado por: kaiserdj en 25 Marzo 2018, 15:37 pm
Buenas tengo el siguiente bat, que ejecuto directamente y funciona sin problemas:
Código:
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%
El problema surge cuando lo ejecuto desde un programa en c#, la funcion es la siguiente:
Código:
            string bat = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "start.bat");

            string Xmx = this.textBox1.Text;
            string Xmn = this.textBox2.Text;
            string NAME = this.textBox3.Text;

            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.CreateNoWindow = true;
            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();
El log que proporciona al ejecutar desde el programa en c#:
Código:
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
No se a que se debe que dejen de funcionar los FOR cuando este se ejecuta desde un programa en c#

El problema es que no se guarda la variable del directorio donde esta java instalado

Muchas gracias y un saludo