.NET Process.Start directory predefinita?


114

Sto attivando un'applicazione Java dall'interno di un'applicazione console C # .NET . Funziona bene nel caso in cui l'applicazione Java non si preoccupi di quale sia la directory "predefinita", ma fallisce per un'applicazione Java che cerca solo la directory corrente per i file di supporto.

Esiste un parametro di processo che può essere impostato per specificare la directory predefinita in cui viene avviato un processo?

Risposte:


183

Sì! ProcessStartInfo Ha una proprietà chiamata WorkingDirectory , basta usare:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Può WorkingDirectoryessere un percorso relativo e, in tal caso, a cosa è relativo, il file corrente o la directory dell'eseguibile corrente? Non riesco a far trovare al mio programma l'eseguibile che sto tentando di avviare. Ho impostato la directory di lavoro sulla directory dell'exe (relativa al file corrente e all'exe corrente), ma non riesco a trovarlo.
Pushkin

56

Utilizzare la proprietà ProcessStartInfo.WorkingDirectory per impostarla prima di avviare il processo. Se la proprietà non è impostata, la directory di lavoro predefinita è% SYSTEMROOT% \ system32.

È possibile determinare il valore di% SYSTEMROOT% utilizzando:

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

Di seguito è riportato un codice di esempio che apre Notepad.exe con una directory di lavoro di% 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);

Esiste anche una variabile di ambiente che controlla la directory di lavoro corrente per il processo a cui è possibile accedere direttamente tramite la proprietà Environment.CurrentDirectory .


Bello, non sapevo che potessi usare le variabili d'ambiente nella proprietà .WorkingDirectory.
Brain2000

1
Bingo, questa è la risposta: la directory predefinita è SYSTEMROOT. +1
ceneri999

17

Solo una nota dopo aver sbattuto la testa cercando di implementarlo. L'impostazione del valore WorkingDirectory non funziona se "UseShellExecute" è impostato su false.


1
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e, una volta che avrai una reputazione sufficiente, potrai commentare qualsiasi post .
Cyclonecode

1
Anche 6 anni dopo, questo commento su UseShellExecute è stato utile. Risolto il problema.
AlanC


6

Il metodo Process.Start ha un overload che accetta un'istanza di ProcessStartInfo. Questa classe ha una proprietà chiamata "WorkingDirectory".

Imposta quella proprietà sulla cartella che desideri utilizzare e questo dovrebbe avviarla nella cartella corretta.


4

Usa la ProcessStartInfoclasse e assegna un valore alla WorkingDirectoryproprietà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.