我最困難的時間試圖讓這個工作,希望你們之前做過這個。卡住C#中的控制檯應用程序中的GenerateConsoleCtrlEvent
我有一個C#控制檯應用程序正在運行繼承其控制檯的子進程。我想要一個由外部應用程序捕獲的ctrl-c傳遞給內部應用程序,以便它可以很好地關閉。
我有一些非常簡單的代碼。我開始一個Process,然後用WaitForExit(10)輪詢它。我還有一個註冊的CancelKeyPress處理程序,它在觸發時將bool設置爲true。輪詢循環也會檢查它,如果它是真的,它會調用GenerateConsoleCtrlEvent()(我已通過pinvoke映射)。
我已經嘗試了很多組合的參數GenerateConsoleCtrlEvent()。 0或1表示第一個參數,0或第二個參數的子進程ID。似乎沒有任何工作。有時我得到一個錯誤的回來,Marshal.GetLastWin32Error()返回0,有時我會回到真實。但是沒有一個導致子應用程序接收到ctrl-c。要絕對確定,我寫了一個測試C#應用程序作爲子應用程序,它打印出它正在發生的事情,並驗證當它運行時手動輸入ctrl-c確實會導致它退出。
我幾個小時一直對我的頭撞。任何人都可以給我一些指向哪裏去與此?
我遇到同樣的問題。 GenerateConsoleCtrlEvent似乎被破壞。它不影響進程,不管它是否具有控制檯窗口,也不影響它是否以CREATE_NEW_PROCESS_GROUP開頭。我試過了所有的東西,似乎沒有辦法徹底關閉一個以Process啓動的控制檯應用程序。如果它不是調用進程的控制檯窗口的一部分,則啓動或CreateProcess。 – Triynko 2013-04-22 19:12:49