.NET Process.Start répertoire par défaut?


114

Je lance une application Java depuis une application console C # .NET . Cela fonctionne bien dans le cas où l'application Java ne se soucie pas de ce qu'est le répertoire "par défaut", mais échoue pour une application Java qui recherche uniquement les fichiers de support dans le répertoire actuel.

Existe-t-il un paramètre de processus qui peut être défini pour spécifier le répertoire par défaut dans lequel un processus est démarré?

Réponses:


183

Oui! ProcessStartInfo Possède une propriété appelée WorkingDirectory , utilisez simplement:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Peut-il WorkingDirectoryêtre un chemin relatif, et si oui, à quoi est-il relatif, au fichier courant ou au répertoire de l'exécutable courant? J'ai du mal à faire en sorte que mon programme trouve l'exécutable que j'essaie de démarrer. J'ai défini le répertoire de travail sur le répertoire de l'exe (par rapport au fichier actuel et à l'exe actuel), mais il ne peut pas le trouver.
pushkin

56

Utilisez la propriété ProcessStartInfo.WorkingDirectory pour la définir avant de démarrer le processus. Si la propriété n'est pas définie, le répertoire de travail par défaut est% SYSTEMROOT% \ system32.

Vous pouvez déterminer la valeur de% SYSTEMROOT% en utilisant:

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

Voici un exemple de code qui ouvre Notepad.exe avec un répertoire de travail 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);

Il existe également une variable d'environnement qui contrôle le répertoire de travail actuel de votre processus à laquelle vous pouvez accéder directement via la propriété Environment.CurrentDirectory .


Bien, je ne savais pas que vous pouviez utiliser des variables d'environnement dans la propriété .WorkingDirectory.
Brain2000

1
Bingo, c'est la réponse - le répertoire par défaut est SYSTEMROOT. +1
ashes999

17

Juste une note après avoir frappé ma tête en essayant de mettre en œuvre cela. La définition de la valeur WorkingDirectory ne fonctionne pas si vous avez défini «UseShellExecute» sur false.


1
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message - vous pouvez toujours commenter vos propres messages, et une fois que vous avez une réputation suffisante, vous pourrez commenter n'importe quel article .
Cyclonecode

1
Même 6 ans plus tard, ce commentaire sur UseShellExecute était utile. Correction du problème.
AlanC


6

La méthode Process.Start a une surcharge qui prend une instance de ProcessStartInfo. Cette classe a une propriété appelée "WorkingDirectory".

Définissez cette propriété sur le dossier que vous souhaitez utiliser et cela devrait le faire démarrer dans le dossier approprié.


4

Utilisez la ProcessStartInfoclasse et attribuez une valeur à la WorkingDirectorypropriété.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.