Я запускаю Java-приложение из консольного приложения C# .СЕТЬ. Он отлично работает в том случае, когда приложение Java не заботится о том, какой каталог "по умолчанию", но терпит неудачу для приложения Java, которое только ищет в текущем каталоге файлы поддержки.
Есть ли параметр процесса, который можно установить, чтобы указать каталог по умолчанию, в котором запускается процесс?





Да! ProcessStartInfo имеет свойство WorkingDirectory, просто используйте:
...
using System.Diagnostics;
...
var startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = // working directory
// set additional properties
Process proc = Process.Start(startInfo);
Используйте свойство ProcessStartInfo.WorkingDirectory.
Документы здесь.
Метод Process.Start имеет перегрузку, которая принимает экземпляр ProcessStartInfo. Этот класс имеет свойство под названием «WorkingDirectory».
Установите это свойство в папку, которую вы хотите использовать, и это должно запустить его в правильной папке.
Используйте класс ProcessStartInfo и присвойте значение свойству WorkingDirectory.
Используйте свойство 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.
Бинго, вот и ответ - каталог по умолчанию - SYSTEMROOT. +1
Просто записка после удара головой, пытаясь реализовать это. Установка значения WorkingDirectory не работает, если для параметра UseShellExecute установлено значение false.
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением - вы всегда можете комментировать свои собственные сообщения, и как только у вас будет достаточно репутация, вы сможете комментировать любой пост.
Даже 6 лет спустя этот комментарий об UseShellExecute оказался полезным. Исправлена проблема.
Может ли
WorkingDirectoryбыть относительным путем, и если да, то по отношению к текущему файлу или каталогу текущего исполняемого файла? Мне не удается заставить мою программу найти исполняемый файл, который я пытаюсь запустить. Я установил рабочий каталог в каталог exe (относительно текущего файла и текущего exe), но он не может его найти.