CAEngine::MonitorProcess

This page is a translated version of the page CAEngine::MonitorProcess and the translation is 100% complete.

ADE User Guide > ADE Server Class Reference > CAEngine

Other languages:
English • ‎中文

(ADE 4.3新特徵)

CAEngine::MonitorProcess(long pid)

通過指定的進程ID在ADE實例當中設置一個監控線程用來探測進程的結束,如果指定進程ID先結束,那麼將終止ADE進程。在ADE運行的計算機上該進程必須退出。

通過使用該函數,可以幫助保證ADE進程在你的代碼異常終止時也能正常結束,例如在調試過程中你過早地停止代碼運行,或者在你的程序奔潰時。

COM協議需要一個調用程序來釋放其使用的每一個對象,進程外COM伺服器一般情況下保持處於活動狀態,直至最後的對象被釋放。在ADE中,ADE將一般情況下保持處於活動狀態,直至進程在該對象上調用IUnknown::Release()(標準的COM接口方法)。但是這時會出現一個問題,當調用的進程提前終止時,例如在調試過程中或者奔潰時被終止。當發生這種情況時,調用進程沒有機會釋放對象,因此ADE沒有收到釋放信號,將繼續運行。(任何進程外COM伺服器都是如此)。

在你開始一個進程外ADE實例後,立即通過調用該方法,為它提供你自己的程序進程ID,使ADE能夠監視你的進程狀態,並在它終止時探測。正常情況下,你的進程將釋放最後的 CAEngine實例以便ADE將先結束。但是這不會發生,ADE.exe進程將在它探測到你的進程終止時自動終止其本身。

用法

在VB.NET語法中,你應該在獲得 CAEngine後立刻條用,如下所示:

Dim ade As  CAEngine = new CAEngine
Dim pid As Long = System.Diagnostics.Process.GetCurrentProcess().Id
ade.MonitorProcess(pid)

返回值

如果成功設置監控線程將返回ture,否則返回false。

 ErrorCode ErrorText,和 OutputBuffer 属性提供关于未成功时错误本质的更多信息。可能的错误代码包括:

注意

你不能對一個進程取消監控。一旦監控線程被建立,它將一直存在直到ADE終止。

你可以使用不同的pid(進程名稱)多次調用。當這樣做時,ADE將監視所有指定進程,任何一個進程結束它都將結束。

你只能在ADE.exe運行的計算機上監視進程。如果你通過DCOM使用遠程ADE.exe,這將不能工作。

被監視的進程沒有必要調用是調用的進程。你所需要的是它的pid。

你的安全設置必須是:ADE.exe進程賬戶允許它通過同步許可獲取指定進程句柄(詳細信息請參考[OpenProcess])。沒有該許可是不同尋常的,但並非不可能。

該方法在ADE 4.2 COM API中沒有曝光,因此你必須等待ADE4.3的"正式"發佈。然而,在4.2.3程序補丁里有一個後門,這樣能夠通過自動化API接口調用。因此,從4.2.3開始你可以這樣做:

 Dim adeObj As Object = ade
 ade.MonitorProcess(System.Diagnostics.Process.GetCurrentProcess().Id)
Comments


You are not allowed to post comments.