Каталог .NET Process.Start за замовчуванням?


114

Я запускаю програму Java зсередини консольної програми C # .NET . Це чудово працює у випадку, коли додатку Java не важливо, що таке каталог «за замовчуванням», але виходить з ладу для програми Java, яка лише шукає файли підтримки в поточному каталозі.

Чи є параметр процесу, який можна встановити, щоб вказати каталог за замовчуванням, в якому запускається процес?

Відповіді:


183

Так! ProcessStartInfo Має властивість під назвою WorkingDirectory , просто використовуйте:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Чи може WorkingDirectoryбути відносний шлях, і якщо так, то яке відношення до поточного файлу чи каталогу поточного виконуваного файлу? У мене виникають проблеми з отриманням програми, щоб знайти виконуваний файл, який я намагаюся запустити. Я встановив робочий каталог в каталог EXE (щодо поточного файлу та до поточного exe), але він не може його знайти.
— пушкін

56

Використовуйте властивість 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.CurrentDirectory .


Приємно, я не знав, що ви можете використовувати змінні середовища у властивості .WorkingDirectory.
— Brain2000

1
Бінго, це відповідь - за замовчуванням каталог SYSTEMROOT. +1
— ashes999

17

Лише замітка після удару в голову, намагаючись це здійснити. Встановлення значення WorkingDirectory не працює, якщо для параметра "UseShellExecute" встановлено значення false.


1
Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх публікацією - ви завжди можете коментувати свої власні публікації, і коли ви матимете достатню репутацію, ви зможете коментувати будь-яку публікацію .
— Cyclonecode

1
Навіть через 6 років цей коментар про UseShellExecute виявився корисним. Виправлена ​​проблема.
— AlanC


6

Метод Process.Start має перевантаження, яке приймає екземпляр ProcessStartInfo. Цей клас має властивість під назвою "WorkingDirectory".

Встановіть цю властивість у папку, яку ви хочете використовувати, і вона повинна змусити її запускатись у правильній папці.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.