2012-09-17 4 views
0

DevCon.exe를 사용하여 파일을 캡처하고 파일에 기록하는 코드는 다음과 같습니다. 나는이 파일을 파싱하여 필요를 찾는다.C#에서 셸 명령 사용

Process p = new Process(); 
p.StartInfo.FileName = "cmd.exe"; 
p.StartInfo.Arguments = "/C devcon.exe find = port *monitor* > monitor_Details.txt"; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.UseShellExecute = true; 
p.StartInfo.Verb = "runas"; 
p.Start(); 

불행히도이 코드를 사용하면 텍스트 파일이 생성되지 않습니다. 그래서, 내가 언급 한 쉘 명령은 고려되지 않았다. 동일한 명령이 CMDLine에서 작동합니다.

누구에게 무슨 일이 일어나고 있는지에 관해서는 도움이 될 수 있습니까?

아래 코드를 사용해 보았는데 작동하지 않습니다.

Process p = new Process(); 
p.StartInfo.FileName = "devcon.exe"; 
p.StartInfo.Arguments = "find = port *monitor* > monitor_Details.txt"; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.UseShellExecute = true; 
p.StartInfo.Verb = "runas"; 
p.Start(); 
+0

현재 디렉토리를 설정하고 있습니까? 그렇지 않으면 상대 위치가 자신이 생각하는 곳이 아닐 수도 있습니다. – Servy

+0

위치/작업 디렉토리가 여기에 있습니다. 그들은 문제가 아닌 것 같습니다. –

답변

3

당신은 논문 라인을 추가 할 수 있습니다 - RedirectStandardOutput

p.StartInfo.RedirectStandardOutput = true; 
..... 
p.Start(); 
string result = p.StandardOutput.ReadToEnd(); 

링크를 기반 :

+1

거기에'UseShellExecute = false'를 추가해야합니다. 덕분에 – Nasreddine

+0

. 그러나 이상하게도 파일 "monitor_Details.txt"의 내용은 파일이 생성되었지만 비어 있음을 알 수 없습니다. ">"쓰기 작업에 문제가 있습니까? –

+0

stack_pointer가 EXTINCT, 어쩌면 당신의 주장 인 것을 도와 드리겠습니다. –

0

http://msdn.microsoft.com/fr-fr/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx 나는 똑같은 문제를 가지고 있었다. 해결 방법은 프로세스에 대한 UserName 및 Password 매개 변수와 "runas"동사를 제공하는 것입니다. 그러면 새 프로세스가 시작되고 파일을 읽고 쓸 수 있습니다. 나는 명확한 설명이 없지만 그것은 나를 위해 일했다.

p.StartInfo.Verb = "runas"; 
p.StartInfo.UserName = Environment.UserName; 
p.StartInfo.Password = PromptUserPassword(); //Get password as SecureString