.NET Process.Start каталог по умолчанию? - PullRequest
103 голосов
/ 22 сентября 2008

Я запускаю Java-приложение из консольного приложения C # .NET . Он отлично работает в случае, когда приложению Java не важно, что такое каталог «по умолчанию», но происходит сбой для приложения Java, которое ищет только текущий каталог для файлов поддержки.

Существует ли параметр процесса, который можно задать для указания каталога по умолчанию, в котором запущен процесс?

Ответы [ 6 ]

168 голосов
/ 22 сентября 2008

Да! ProcessStartInfo Имеет свойство с именем WorkingDirectory , просто используйте:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);
51 голосов
/ 22 сентября 2008

Используйте свойство ProcessStartInfo.WorkingDirectory , чтобы установить его до запуска процесса. Если свойство не установлено, рабочим каталогом по умолчанию является% SYSTEMROOT% \ system32.

Вы можете определить значение% SYSTEMROOT%, используя:

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

Вот пример кода, который открывает Notepad.exe с рабочим каталогом% 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);

Существует также переменная Environment, которая управляет текущим рабочим каталогом вашего процесса, к которому вы можете обращаться напрямую через свойство Environment.CurrentDirectory .

12 голосов
/ 04 апреля 2014

Просто записка после удара в голову, пытаясь реализовать это. Установка значения WorkingDirectory не работает, если для «UseShellExecute» установлено значение false.

8 голосов
/ 22 сентября 2008

Используйте свойство ProcessStartInfo.WorkingDirectory.

Документы здесь .

5 голосов
/ 22 сентября 2008

Метод Process.Start имеет перегрузку, которая принимает экземпляр ProcessStartInfo. Этот класс имеет свойство с именем «WorkingDirectory».

Установите это свойство в папку, которую вы хотите использовать, и это должно заставить его запускаться в правильной папке.

4 голосов
/ 22 сентября 2008

Используйте класс ProcessStartInfo и присвойте значение свойству WorkingDirectory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...