2008-09-22 8 views
86

Estoy descargando 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..NET Process.Start directorio predeterminado?

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

Respuesta

142

Sí! ProcessStartInfo tiene una propiedad llamada WorkingDirectory, sólo tiene que utilizar:

... 
using System.Diagnostics; 
... 

var startInfo = new ProcessStartInfo(); 

    startInfo.WorkingDirectory = // working directory 
    // set additional properties 

Process proc = Process.Start(startInfo); 
+3

1 Excelente, exactamente lo que estaba buscando. –

+0

¿Puede el 'WorkingDirectory' ser una ruta relativa, y si es así, ¿qué ¿es relativo a, el archivo actual o el directorio del ejecutable actual?Tengo problemas para que mi programa encuentre el ejecutable que intento iniciar. Establecí el directorio de trabajo en el directorio del exe (relativo al archivo actual y al actual), pero no puede encontrarlo. – pushkin

8

Utilice la propiedad ProcessStartInfo.WorkingDirectory.

Docs here.

5

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

4

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

48

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

se puede determinar el valor de% SYSTEMROOT% mediante el uso de:

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

Aquí hay un código de ejemplo que abre el Bloc de notas con un directorio de trabajo del programa%%:

... 
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); 

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

+0

Bueno, no sabía que podría usar variables de entorno en la propiedad .WorkingDirectory. – Brain2000

+0

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

5

Solo una nota después de golpear mi 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 aclaraciones 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] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). – Cyclonecode

0

mis dos centavos:

, aunque otros servicios (por ejemplo ShellExecute Win32) permiten especificar la ruta completa para el exe, NO escribir algo como:

_processStartInfo.FileName = @ "c: \ Windows \ sustem32 \ Notepad.exe ";

o obtendrá una excepción: "El sistema no puede encontrar el archivo especificado". Use nombre simple.

Y llamada soporte con tratar .. .. captura

:(

Cuestiones relacionadas