C sharp - Variables de entorno

 
Vista:
sin imagen de perfil
Val: 23
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Variables de entorno

Publicado por Mendizalea (14 intervenciones) el 04/03/2019 16:53:47
Buenas tardes,

Tengo una pequeña aplicación el cual tiene opcion de ejecutar un batch pulsando un boton (llamada directa al archivo):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Process proc = null;
            try
            {
                string batDir = string.Format(@"C:\Batch");
                proc = new Process();
                proc.StartInfo.WorkingDirectory = batDir;
                proc.StartInfo.FileName = "hola.cmd";
                proc.StartInfo.CreateNoWindow = false;
                proc.Start();
                proc.WaitForExit();
                MessageBox.Show("Bat file executed !!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace.ToString());
            }

El problema que me surge es en los sistemas operativos de 64 bits. Dentro del batch, se hace uso de la variable de entorno de windows %programfiles%.

Si compilo como Any CPU a la hora de ejecutar en un 64 bits el batch, la variable %programfiles% me devuelve C:\Program Files (x86), con el problema de que no ecuentra en fichero en cuestion.

Si en cambio, compilo como x64 me da la ruta correcta C:\Program Files

Y la correcta deberia de ser la segunda,C:\Program Files
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Variables de entorno

Publicado por miguelZ (8 intervenciones) el 04/03/2019 17:57:22
puedes agregar un metodo para obtener la direccion del folder dependiendo del entorno,

1
2
3
public string GetFolderProgram(){
return Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
}

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Variables de entorno

Publicado por Nacho (115 intervenciones) el 04/03/2019 18:48:55
Tiene pinta de que como Any CPU se ejecuta la consola en 32 bits y sólo se ejecuta la de 64 como x64. Saca tú la consola según el sistema operativo con el bath de parámetro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Variables de entorno

Publicado por Mendizalea (14 intervenciones) el 05/03/2019 10:41:33
Gracias por su respuesta.

He probado a ejecutar el CMD de 64 bits con el Any CPU pero sigo teniendo el mismo problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Process proc = null;
try
{
    string batDir = string.Format(@"C:\Batch");
    proc = new Process();
    proc.StartInfo.WorkingDirectory = batDir;
    proc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
    proc.StartInfo.Arguments = "/c hola.cmd";
    proc.StartInfo.CreateNoWindow = false;
    proc.Start();
    proc.WaitForExit();
    //MessageBox.Show("Bat file executed !!");
}
catch (Exception ex)
{
    MessageBox.Show(ex.StackTrace.ToString());
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Variables de entorno

Publicado por Mendizalea (14 intervenciones) el 05/03/2019 11:06:12
Resuelto, en las opcioines de compilacion le he desactivado la opcion de Preferencia de 32 bits y con eso ya funciona con cualquiera de 2 dos codigos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar