2011-10-20 222 views
2

我將從C++應用程序開始解釋我的確切需求。我有一個C++應用程序,它使用任何參數(C++應用程序在項目中使用getchar())從控制檯(鍵盤)接收輸入(一個名爲「run」的小命令)。以及問題,我能夠從C#使用System.Diagnostics.Process運行的exe文件,但我想輸入命令「運行」在C#程序執行C++應用程序。有可能這樣做嗎?如何從C#運行C++ .exe文件?

+2

什麼用'System.Diagnostics.Process'的問題是什麼?這是通常的方式。 – Vlad

+0

那麼,你可以將C#程序的控制檯輸出重定向到接受'run'的程序。但爲什麼這麼複雜呢?你想實現什麼? – 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. 
    }