2014-01-24 123 views
1

我遇到與TerminateProcess()函數有關的問題。 我正在編寫一個JobScheduler應用程序,該應用程序在特定時間安排和啓動作業。 爲此,我使用CreateProcess()來執行我的JobLauncher。正確關閉應用程序:TerminateProcess的替代方法

的JobLauncher過程然後啓動其有效地執行該作業執行時,等待其結束,並監視持續時間,用戶和內核倍經過等

爲了殺死從作業控制檯程序(使用的CreateProcess) JobScheduler我首先開始使用TerminateProcess(),但它不允許我正確關閉可執行文件本身。我的意思是我找不到任何終止事件的方法。

直到我找到一個更好的方式比一個殘酷了TerminateProcess(),我撰寫的用的GenerateConsoleCtrlEvent()在調用程序中的中間解決方案。

在啓動目標作業可執行文件的作業應用程序中,我使用了SetConsoleCtrlHandler()安裝了一個處理程序。 而在處理程序中,我可以終止工作流程並正確通知我的第三方。 這是我現在發現的更好的解決方案。

有沒有更好的方法來編程和正確關閉一個過程? 你這個解決方案完全荒謬嗎? 我不是一個「系統級」的專業開發人員,但...

Z.

+0

發送'WM_CLOSE'消息到該進程? –

+0

你是什麼意思「[TerminateProcess']不允許我正確關閉可執行文件」? 'TerminateProcess'是終止進程最殘酷的方式,它將地毯拉出 - 沒有DLL分離通知,沒有文件緩衝區刷新,現在再見。該進程已打開的任何句柄將代表其關閉(包括其自己的可執行文件)。 –

+0

@Adam:我的意思是TerminateProcess只是「終止」這個過程。期。事先未通知「已終止」進程。 – Zyend

回答

0

這清楚地知道Windows控制檯的問題,你可以找到一些解決方案here

我們使用名稱爲「Kamikaze」的內部控制檯實用程序。它按照here的描述工作,對我來說這是一個最好的解決方案,因爲Windows版本和Windows體系結構(x86,x64)之間的移植沒有問題。

+0

感謝您的鏈接。我很高興看到我寫的解決方案並沒有那麼糟糕! – Zyend

相關問題