2013-04-10 56 views
1

我有一個控制檯應用程序,生成一個「CMD MCAST/recv的...> somefile.txt」發送CTRL + C的過程中不殺死我的窗口

(process.standardoutputstream不MCAST正常工作如果您想參與到這個問題看redirecting standard output, event is not raised

我需要一個CTRL + C發送到MCAST和使用此代碼:

[DllImport("kernel32.dll")] 
    static extern bool GenerateConsoleCtrlEvent(
    uint dwCtrlEvent, 
    uint dwProcessGroupId); 

    void start(string path) 
    { 
     currentProcess = new Process(); 
     currentProcess.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe"; 
     currentProcess.StartInfo.Arguments = "/C " + "mcast /recv /grps:239.255.0.1 /dump:3" 
        + " > " + path; 
     currentProcess.StartInfo.UseShellExecute = false; 
     currentProcess.Start(); 
    } 

    void Stop() 
    { 
     Process mcast = Process.GetProcessesByName("mcast")[0]; 
     GenerateConsoleCtrlEvent(0 /*CTRL_C_EVENT*/, (uint)mcast.SessionId); 
     } 

然而MCAST與我PROGRAMM和mcasts會話ID共享控制檯是零。所以我的程序也收到CTRL + C並終止(這實際上不是我想要做的),有什麼想法?

編輯:我的所有研究表明,不可能將CTRL + C事件發送到另一個進程。只有WIN_CLOSE事件可以發送,控制檯進程忽略這些事件

+0

你可以使用'Process.Kill()'嗎? – shf301 2013-04-10 17:11:07

+0

不,我需要優雅地結束mcast或丟失數據 – 2013-04-11 06:36:13

回答

0

您可以嘗試調用currentProcess.CloseMainWindow(),這應該關閉cmd.exe,並且cmd會希望正常關閉正在執行的應用程序。

+0

CloseMainWindow完全被cmd.exe和mcast.exe忽略,但感謝這個想法 – 2013-04-10 16:22:38