2014-02-07 10 views
2

그래서 웹을 수색 한 후 C#에서 새로운 프로세스를 시작하여 명령 줄 프롬프트를 실행하는 방법을 설명한 몇 가지 기사 (일부는 stackoverflow)를 발견했습니다. 주석 처리 한 두 번째 인수는 정상적으로 작동하지만 실제로 필요한 첫 번째 인수 (첫 번째 인수)는 없습니다. "주 클래스 edu.stanford.nlp.parser.lexparser.LexicalizedParser를 찾을 수 없거나로드 할 수 없습니다"라는 오류를 반환합니다. 명령 줄을 비 프로그램 방식으로 연 다음 이스케이프 된 인용문 이외에 동일한 명령을 실행하면 훌륭하게 작동합니다. 문제는 무엇이 될 수 있는지에 대한 아이디어가 있습니까? 감사!커맨드 라인 프로세스

var proc = new Process 
{ 
    StartInfo = new ProcessStartInfo 
    { 
     FileName = "CMD.exe", 
     Arguments = "/c java -mx100m -cp \"*\" edu.stanford.nlp.parser.lexparser.LexicalizedParser edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz libtest.txt", 
     // Arguments = "/c echo Foo", 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     RedirectStandardError = true, 
     CreateNoWindow = true 
    } 
}; 
proc.Start(); 

Console.WriteLine(proc.StandardOutput.ReadToEnd()); 
Console.WriteLine(proc.StandardError.ReadToEnd()); 

답변

1

프로세스를 시작하는 실행 경로가 올바른지 확인하십시오!

SysInternals의 프로세스 모니터를 사용하여 해당 클래스를 찾는 위치를 파악할 수 있습니다.

+0

그게 문제였습니다! 머리 꼭대기에서 경로를 조정하는 방법을 알고 있습니까? "cd"명령은 작동하지 않지만 C#에서 동일한 작업을 수행 할 수있는 방법이 있다면 완벽 할 것입니다. 그렇지 않은 경우 cmd.exe 파일을 기본 디렉토리가 아닌 다른 곳에서 작동시키는 방법을 알아낼 수 있습니다. 어느 쪽이든, 고마워! –

+0

@ user2742040 cmd.exe 내에서 경로를 설정하는 것이 효과가 없을 것 같습니다. 그러나 올바른 경로로 ProcessStartInfo 객체를 생성하고 Process.Start (여기)에 전달하면 cmd가 현재 작업 디렉토리에서 열리 며 매우 확신합니다. – toATwork

+0

그래, 그랬지. 실제로 프로그램을 옮겨야한다고 생각했지만 길을 바꾸는 것이 효과적이었습니다! –