2010-07-30 5 views
5

알려진 프로세스에서 사용하는 파일의 절대 경로를 명령 줄을 통해 확인하고자합니다. 현재 프로세스는 구성 파일과 같은 다양한 파일을 가리키는 명령 줄에서 상대 경로로 시작됩니다. 문제는 경로가 실행 파일이 들어있는 폴더와 관련이없는 경우 커맨드 라인에서 제공되는 상대 경로를 변환 할 방법이 없다는 것입니다. 물론 100 % 확신 할 수 없습니다. 예를 들어 두 개의 배치 파일 용C# 다른 프로세스의 작업 디렉토리 가져 오기

:

BATCH 1 CD C : \ 테스트 \ 빈 TEST.EXE ... \ 구성 \ config.ini를

BATCH 2 CD의 C : \ 테스트 빈 \ test.exe config \ config.ini

배치 파일 하나의 경우 얻을 수있는 명령 줄은 "c : \ test \ bin \ test.exe .. \ config \ config.ini"이고 배치 파일 2의 경우 "c : \ test \ bin \ test.exe config \ config.ini"를 얻으십시오. 그래서,이 경로를 해결할 수 없습니다.

어쨌든 우선, ManagementObjectSearcher를 사용하여 WMI 쿼리에서 명령 줄을 얻었습니다. 이제 커맨드 라인에서 전달 된 경로를 해결하기 위해 프로세스가 시작된 작업 디렉토리를 얻지 않으면 안되지만 어떻게해야합니까?

편집 : 키 정보 하나를 잊어 버렸습니다. 다른 프로세스의 작업 디렉토리를 가져오고 싶습니다. 기본적으로 내 메인 프로그램은 다른 프로그램에서 정보를 수집합니다. 실행 파일의 이름을 알고 있기 때문에 프로세스 ID를 확인할 수 있습니다. 명령 줄을 결정할 수도 있습니다. 실행 파일이 시작된 현재 작업 디렉토리 나 현재 디렉토리를 찾아야 만하므로 명령 행의 상대 경로를 확인할 수 있습니다. 나는 그 질문을 분명하게하기를 희망한다.

+1

에서 검색 할 수있는 다양한 경로가있다. "프로세스 작업 디렉토리 가져 오기"는 작업 디렉토리에 대한 질문입니다.이 디렉토리는 실행 중에 변경 될 수 있지만 질문 자체는 실행 파일이 시작된 디렉토리를 묻는 것으로 보입니다. 이는 상당히 다를 수 있습니다. 프로세스 실행). @ chris166의 답변은 질문의 제목을 다루지 만, 제 대답은 질문 자체 인 IMHO를 해결합니다. 아마도 그 혼란을 분명히 할 수 있을까요? – Cyberherbalist

답변

7

제가 생각하기에 Environment.CurrentDirectory은 실행 파일이 시작된 디렉토리를 제공해야합니다. 나중에 변경 될 수 있기 때문에 프로세스 시작시에만 신뢰할 수 있습니다.

또는 아마도 Process.GetCurrentProcess().StartInfo.WorkingDirectory을 시도해보십시오. 나는 그것을 직접 시도하지 않았다. 그냥 위로 보았다. MSDN

+0

나는이 모든 것을 콘솔 응용 프로그램에서 시도했고, Environment.CurrentDirectory는 응용 프로그램이 시작한 디렉토리를 가지고 나왔다고 생각했다. 그러나 Process.GetCurrentProcess(). StartInfo.WorkingDirectory는 빈 문자열로 나타납니다. 어느 날 놀랐습니다. 나는 똑같을 것이라고 생각했습니다. 조금 더 테스트 한 결과, 실행 파일에 대한 바로 가기를 만든 다음 바로 가기의 "시작 위치"속성 (예 : "C : \")으로 수정 한 다음 StartInfo.WorkingDirectory에 있던 내용을 수정 한 것으로 나타났습니다. – Cyberherbalist

1

Application.ExecutablePath을 시도 했습니까?

는 다른 방법으로, 나는 질문 제목은 당신이 요구하는지 확실히 무엇 아니라고 생각 Application

관련 문제