.NET Process.Start directorio predeterminado?

Estoy disparando una aplicación Java desde el interior de una aplicación de consola C # .NET . Funciona bien para el caso en que a la aplicación Java no le importa cuál es el directorio “predeterminado”, pero falla para una aplicación Java que solo busca en el directorio actual los archivos de soporte.

¿Hay algún parámetro de proceso que se pueda configurar para especificar el directorio predeterminado en el que se inicia un proceso?

¡Sí! ProcessStartInfo tiene una propiedad llamada WorkingDirectory , solo use:

... using System.Diagnostics; ... var startInfo = new ProcessStartInfo(); startInfo.WorkingDirectory = // working directory // set additional properties Process proc = Process.Start(startInfo); 

Use la propiedad ProcessStartInfo.WorkingDirectory para configurarlo antes de iniciar el proceso. Si la propiedad no está configurada, el directorio de trabajo predeterminado es% SYSTEMROOT% \ system32.

Puede determinar el valor de% SYSTEMROOT% utilizando:

 string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT"); 

Aquí hay un código de muestra que abre Notepad.exe con un directorio de trabajo de% ProgramFiles%:

 ... using System.Diagnostics; ... ProcessStartInfo _processStartInfo = new ProcessStartInfo(); _processStartInfo.WorkingDirectory = @"%ProgramFiles%"; _processStartInfo.FileName = @"Notepad.exe"; _processStartInfo.Arguments = "test.txt"; _processStartInfo.CreateNoWindow = true; Process myProcess = Process.Start(_processStartInfo); 

También hay una variable de entorno que controla el directorio de trabajo actual para su proceso al que puede acceder directamente a través de la propiedad Environment.CurrentDirectory .

Use la propiedad ProcessStartInfo.WorkingDirectory.

Documentos aquí .

Solo una nota después de golpear mi cabeza tratando de implementar esto. Establecer el valor WorkingDirectory no funciona si tiene “UseShellExecute” establecido en falso.

El método Process.Start tiene una sobrecarga que toma una instancia de ProcessStartInfo. Esta clase tiene una propiedad llamada “WorkingDirectory”.

Establezca esa propiedad en la carpeta que desea usar y debería hacer que se inicie en la carpeta correcta.

Use la clase ProcessStartInfo y asigne un valor a la propiedad WorkingDirectory .