.NET Process.Start Standardverzeichnis?

Ich feuere eine Java-Anwendung aus einer C # .NET- Konsolenanwendung ab. Es funktioniert gut für den Fall, dass es der Java-Anwendung egal ist, was das “Standard” -Verzeichnis ist, aber für eine Java-Anwendung fehlschlägt, die nur das aktuelle Verzeichnis nach Unterstützungsdateien durchsucht.

Gibt es einen processparameter, der festgelegt werden kann, um das Standardverzeichnis anzugeben, in dem ein process gestartet wird?

   

Ja! ProcessStartInfo Hat eine Eigenschaft namens WorkingDirectory , verwenden Sie einfach:

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

Verwenden Sie die ProcessStartInfo.WorkingDirectory- Eigenschaft, um sie vor dem Start des processes festzulegen . Wenn die Eigenschaft nicht festgelegt ist, ist das Standardarbeitsverzeichnis% SYSTEMROOT% \ system32.

Sie können den Wert von% SYSTEMROOT% ermitteln, indem Sie Folgendes verwenden:

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

Hier ist ein Beispielcode, der Notepad.exe mit einem Arbeitsverzeichnis von% ProgramFiles% öffnet:

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

Es gibt auch eine Umgebungsvariable, die das aktuelle Arbeitsverzeichnis für Ihren process steuert, auf das Sie direkt über die Environment.CurrentDirectory- Eigenschaft zugreifen können.

Verwenden Sie die ProcessStartInfo.WorkingDirectory-Eigenschaft.

Dokumente hier .

Nur eine Notiz, nachdem ich meinen Kopf geschlagen habe, um das zu implementieren. Das Festlegen des WorkingDirectory-Werts funktioniert nicht, wenn Sie “UseShellExecute” auf false festgelegt haben.

Die Process.Start-Methode hat eine Überladung, die eine Instanz von ProcessStartInfo erfordert. Diese class hat eine Eigenschaft namens “WorkingDirectory”.

Legen Sie diese Eigenschaft auf den Ordner fest, den Sie verwenden möchten, und starten Sie sie im richtigen Ordner.

Verwenden Sie die ProcessStartInfo class, und weisen Sie der WorkingDirectory Eigenschaft einen Wert zu.