2011-10-20 3 views
2

정확한 요구 사항을 설명하기 위해 C++ 응용 프로그램부터 시작하겠습니다. C++ 응용 프로그램은 어떤 인수 (C++ 응용 프로그램에서는 프로젝트에서 getchar() 사용)를 사용하여 콘솔 (키보드)에서 입력 ("실행"이라는 작은 명령)을 사용합니다. 잘 문제가 나는 System.Diagnostics.Process를 사용하여 C#에서 exe 파일을 실행할 수 있지만 C++ 프로그램을 실행하기 위해 C에서 programitically "run"명령을 입력하고 싶습니다. 그렇게 할 수 있습니까?C에서 C++ .exe 파일을 실행하는 방법은 무엇입니까?

+2

'System.Diagnostics.Process'의 문제는 무엇인가? 그것은 일반적인 방법입니다. – Vlad

+0

음, C# 프로그램의 콘솔 출력을 '실행'을 허용하는 프로그램으로 리디렉션 할 수 있습니다. 그러나 왜 그렇게 복잡합니까? 달성하고자하는 것은 무엇입니까? – Vlad

답변

3

예입니다.

: 키보드를 사용하여 텍스트를 입력하신 것처럼, 이제이 프로세스의 표준 입력에 기록합니다

var proc = new Process(); 

proc.StartInfo.FileName = "program.exe"; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardInput = true; 

proc.Start(); 
var sw = proc.StandardInput; 

을 : 당신은 당신이 직접 쓸 수 있도록 생성 된 프로세스의 입력 스트림을 리디렉션 할 필요가 당신이 작성 완료되면

sw.WriteLine("run something"); 

마지막으로 정리하는 것을 잊지 마세요 :

sw.Close(); 
proc.WaitForExit(); 
proc.Close(); 
+0

안녕 존 .. 작동하지만 문제는, 때 sw.WriteLine ("뭔가를 실행"); 처리 콘솔의 인쇄 쓰레기 문자 .. 쓰레기 문자를 인쇄 할 때 출력이 잘못되었습니다. – Bhuvan

+0

인코딩을 확인 했습니까? –

+0

@Bhuvan : 우리는 SO에서 디버깅 할 수 없습니다. 특히 코드를 보지 않고서는 디버깅 할 수 없습니다. – Jon

0
// Use ProcessStartInfo class 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.CreateNoWindow = false; 
    startInfo.UseShellExecute = false; 
    startInfo.FileName = "run.exe"; 
    startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    startInfo.Arguments = "-f j "; 

    try 
    { 
     using (Process exeProcess = Process.Start(startInfo)) 
     { 
     exeProcess.WaitForExit(); 
     } 
    } 
    catch 
    { 
     // Log error. 
    } 
관련 문제