C # .NET 콘솔 응용 프로그램 내부에서 Java 응용 프로그램을 시작하고 있습니다 . Java 애플리케이션이 "기본"디렉토리가 무엇인지 신경 쓰지 않는 경우에는 잘 작동하지만 현재 디렉토리에서만 지원 파일을 검색하는 Java 애플리케이션에서는 실패합니다.
프로세스가 시작되는 기본 디렉토리를 지정하도록 설정할 수있는 프로세스 매개 변수가 있습니까?
C # .NET 콘솔 응용 프로그램 내부에서 Java 응용 프로그램을 시작하고 있습니다 . Java 애플리케이션이 "기본"디렉토리가 무엇인지 신경 쓰지 않는 경우에는 잘 작동하지만 현재 디렉토리에서만 지원 파일을 검색하는 Java 애플리케이션에서는 실패합니다.
프로세스가 시작되는 기본 디렉토리를 지정하도록 설정할 수있는 프로세스 매개 변수가 있습니까?
답변:
프로세스를 시작하기 전에 ProcessStartInfo.WorkingDirectory 속성을 사용하여 설정합니다. 속성이 설정되지 않은 경우 기본 작업 디렉터리는 % SYSTEMROOT % \ system32입니다.
다음을 사용하여 % SYSTEMROOT %의 값을 확인할 수 있습니다.
string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");
다음은 % ProgramFiles %의 작업 디렉터리로 Notepad.exe를 여는 샘플 코드입니다.
...
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 속성을 통해 직접 액세스 할 수있는 프로세스의 현재 작업 디렉터리를 제어하는 환경 변수도 있습니다.
이것을 구현하려고 내 머리를 치고 나서 메모. "UseShellExecute"를 false로 설정 한 경우 WorkingDirectory 값 설정이 작동하지 않습니다.
WorkingDirectory은 상대 경로 가 될 수 있으며 , 그렇다면 현재 파일이나 현재 실행 파일의 디렉토리와 관련이 있습니까? 프로그램에서 시작하려는 실행 파일을 찾는 데 문제가 있습니다. 작업 디렉터리를 exe의 디렉터리 (현재 파일 및 현재 exe에 상대적)로 설정했지만 찾을 수 없습니다.