.NET Process. ¿Iniciar directorio predeterminado?


114

Estoy disparando una aplicación Java desde el interior de una aplicación de consola C # .NET . Funciona bien para el caso en el 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 archivos de soporte en el directorio actual.

¿Existe un parámetro de proceso que se pueda configurar para especificar el directorio predeterminado en el que se inicia un proceso?

Respuestas:


183

¡Si! 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);

¿Puede WorkingDirectoryser una ruta relativa y, de ser así, a qué se refiere, el archivo actual o el directorio del ejecutable actual? Tengo problemas para que mi programa encuentre el ejecutable que estoy intentando iniciar. He configurado el directorio de trabajo en el directorio del exe (relativo al archivo actual y al exe actual), pero no puedo encontrarlo.
Pushkin

56

Utilice la propiedad ProcessStartInfo.WorkingDirectory para configurarlo antes de iniciar el proceso. Si no se establece la propiedad, el directorio de trabajo predeterminado es% SYSTEMROOT% \ system32.

Puede determinar el valor de% SYSTEMROOT% usando:

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 .


Bien, no sabía que podía usar variables de entorno en la propiedad .WorkingDirectory.
Brain2000

1
Bingo, esa es la respuesta: el directorio predeterminado es SYSTEMROOT. +1
cenizas999

17

Solo una nota después de golpearme la cabeza tratando de implementar esto. Establecer el valor de WorkingDirectory no funciona si tiene "UseShellExecute" establecido en falso.


1
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que tenga suficiente reputación , podrá comentar cualquier publicación .
Cyclonecode

1
Incluso 6 años después, este comentario sobre UseShellExecute fue útil. Se solucionó el problema.
AlanC


6

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 eso debería hacer que se inicie en la carpeta correcta.


4

Utilice la ProcessStartInfoclase y asigne un valor a la WorkingDirectorypropiedad.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.