專(zhuān)利名稱(chēng):一種基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明涉及應(yīng)用程序監(jiān)控技術(shù),具體涉及一種基于窗口平臺(tái)的應(yīng)用程序監(jiān) 控方法。
背景技術(shù):
在電信網(wǎng)絡(luò)中,除了用于完成用戶(hù)接入和呼叫流程處理的嵌入式系統(tǒng)外, 網(wǎng)管服務(wù)、計(jì)費(fèi)服務(wù)、統(tǒng)計(jì)服務(wù)、智能呼叫等服務(wù)功能也是在后臺(tái)服務(wù)器上實(shí)現(xiàn)的,而由于窗口 ( Windows)平臺(tái)具有通用性、易操作性等特點(diǎn),所以,現(xiàn) 有電信網(wǎng)絡(luò)中很多后臺(tái)服務(wù)器都是基于Windows平臺(tái)的。為了使一個(gè)后臺(tái)服務(wù)器可以提供多種服務(wù)功能,通常的做法是將每種服務(wù) 功能做成一個(gè)獨(dú)立的應(yīng)用程序,例如完成計(jì)費(fèi)功能的計(jì)費(fèi)服務(wù)器程序、完成統(tǒng) 計(jì)功能的統(tǒng)計(jì)服務(wù)器程序等。多個(gè)獨(dú)立的程序在同一個(gè)后臺(tái)服務(wù)器上運(yùn)行時(shí), 如果出現(xiàn)某個(gè)或某些程序異?;蜷L(zhǎng)時(shí)間不響應(yīng)的情況,就需要及時(shí)重啟所述程 序甚至重啟服務(wù)器,否則將會(huì)導(dǎo)致業(yè)務(wù)錯(cuò)誤,甚至業(yè)務(wù)中斷。因此,必須采用 有效的監(jiān)控方法,實(shí)時(shí)監(jiān)控這些運(yùn)行在同 一個(gè)后臺(tái)服務(wù)器上的多個(gè)應(yīng)用程序的 運(yùn)行狀況,以1更在應(yīng)用程序異?;蜷L(zhǎng)時(shí)間不響應(yīng)的情況下,及時(shí)重啟程序或服 務(wù)器以保證業(yè)務(wù)正常。Windows操作系統(tǒng)本身提供了 一些針對(duì)Windows平臺(tái)上應(yīng)用程序的監(jiān)控方 法,例如,將應(yīng)用程序做成服務(wù)程序,在服務(wù)配置時(shí),通過(guò)服務(wù)控制器設(shè)置在 服務(wù)失敗時(shí)重啟服務(wù)程序或重啟服務(wù)器。但是,由于服務(wù)控制器無(wú)法對(duì)服務(wù)程 序長(zhǎng)時(shí)間不響應(yīng)的情況及時(shí)作出判斷,不能4艮好地滿(mǎn)足在重啟一個(gè)程序的同時(shí), 重啟其他幾個(gè)相關(guān)程序的要求,所以,這種方法實(shí)時(shí)性差,且容易引起后臺(tái)服 務(wù)器功能錯(cuò)誤。還有一種應(yīng)用程序監(jiān)控方法,通過(guò)編寫(xiě)監(jiān)控程序,由監(jiān)控程序?qū)ο嚓P(guān)應(yīng)用 程序的運(yùn)行狀態(tài)進(jìn)行監(jiān)控。監(jiān)控程序?qū)?yīng)用程序的監(jiān)控是通過(guò)定時(shí)與被監(jiān)控程 序握手實(shí)現(xiàn)的,如果監(jiān)控程序檢測(cè)到某個(gè)被監(jiān)控應(yīng)用程序的握手信號(hào)在一段時(shí) 間內(nèi)丟失,則認(rèn)為該應(yīng)用程序長(zhǎng)時(shí)間未響應(yīng)或者出現(xiàn)異常,從而可以重啟應(yīng)用 程序或服務(wù)器以保證業(yè)務(wù)正常。握手的方法一般采用發(fā)送消息或?qū)懝蚕韮?nèi)存的 方式,但這兩種方式均需要在被監(jiān)控應(yīng)用程序中增加相應(yīng)的代碼,以響應(yīng)握手 消息或?qū)懝蚕韮?nèi)存。所以,這種方法占用系統(tǒng)資源,且可擴(kuò)展性差。發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種基于窗口平臺(tái)的應(yīng)用程序監(jiān)控 方法,能夠?qū)崿F(xiàn)準(zhǔn)確的實(shí)時(shí)監(jiān)控、并且可擴(kuò)張性好。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的 一種基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法,該方法包括a、 監(jiān)控程序啟動(dòng)后,根據(jù)配置文件中被監(jiān)控應(yīng)用程序的配置信息分別創(chuàng)建 被監(jiān)控應(yīng)用程序進(jìn)程;b、 所述^l監(jiān)控應(yīng)用程序進(jìn)程創(chuàng)建成功后,監(jiān)控程序?qū)⒆⑷雱?dòng)態(tài)鏈接庫(kù)DLL 的代碼注入所述創(chuàng)建成功的進(jìn)程;c、 注入DLL修改所述創(chuàng)建成功進(jìn)程中的消息分發(fā)函數(shù)代碼;d、 監(jiān)控程序定時(shí)向所有的被監(jiān)控應(yīng)用程序發(fā)送握手消息,被監(jiān)控應(yīng)用程序 收到消息后,調(diào)用步驟c所述修改后的消息分發(fā)函數(shù),所述修改后的消息分發(fā) 函數(shù)確定收到消息為監(jiān)控程序發(fā)送的握手消息時(shí),向監(jiān)控程序返回應(yīng)答消息。所述配置文件中的應(yīng)用程序配置信息至少包括應(yīng)用程序的路徑、應(yīng)用程 序最大應(yīng)答超時(shí)次數(shù)和發(fā)送握手消息頻率。步驟b所述將注入DLL的代碼注入進(jìn)程為在進(jìn)程中創(chuàng)建一個(gè)入口函數(shù)為 DLL加載函數(shù)、參數(shù)為注入DLL名稱(chēng)的線(xiàn)程并執(zhí)行。所述DLL修改系統(tǒng)消息分發(fā)函數(shù)代碼包括cl、設(shè)置與消息分發(fā)函數(shù)參數(shù)類(lèi)型和返回類(lèi)型相同的函數(shù)指針x,為所設(shè)置的指針申請(qǐng)內(nèi)存;c2、設(shè)置函數(shù)y,所設(shè)置函數(shù)的參數(shù)類(lèi)型和返回類(lèi)型與消息分發(fā)函數(shù)相同;c3、將消息分發(fā)函數(shù)代碼的前五個(gè)字節(jié)拷貝到指針x所指向內(nèi)存的前五個(gè) 字節(jié),并修改消息分發(fā)函數(shù)代碼的第一個(gè)字節(jié)為跳轉(zhuǎn)JMP指令,后四個(gè)字節(jié)為 跳轉(zhuǎn)到函數(shù)y的字節(jié)數(shù);c4、將指針x所指向內(nèi)存的第六個(gè)字節(jié)修改為JMP指令,其后四個(gè)字節(jié)為 跳轉(zhuǎn)到消息分發(fā)函數(shù)第六個(gè)字節(jié)的字節(jié)數(shù)。步驟c2所述函數(shù)y,用于判斷被監(jiān)控應(yīng)用程序進(jìn)程收到的消息是否為監(jiān)控 程序發(fā)送的握手消息,如果是,則向監(jiān)控程序返回應(yīng)答信息后調(diào)用指針x;否 則直接調(diào)用指針x。設(shè)置應(yīng)答時(shí)間閾值,如果監(jiān)控程序發(fā)出握手消息后在應(yīng)答時(shí)間閾值內(nèi)未收 到應(yīng)答消息,則應(yīng)答超時(shí);當(dāng)所述被監(jiān)控應(yīng)用程序應(yīng)答超時(shí)次數(shù)大于應(yīng)用程序 最大應(yīng)答超時(shí)次數(shù)時(shí),監(jiān)控程序重啟所述被監(jiān)控應(yīng)用程序進(jìn)程及其相關(guān)應(yīng)用程 序進(jìn)程。所述重啟被監(jiān)控應(yīng)用程序之前,該方法進(jìn)一步包括監(jiān)控程序結(jié)束所述被 監(jiān)控應(yīng)用程序進(jìn)程。設(shè)置超時(shí)次數(shù)閾值,該方法進(jìn)一步包括所有被監(jiān)控應(yīng)用程序重啟次數(shù)超 過(guò)設(shè)定的超時(shí)次數(shù)閾值時(shí),重啟服務(wù)器。本發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法,采用動(dòng)態(tài)鏈接庫(kù)(DLL)注入 的方式修改應(yīng)用程序加載的消息分發(fā)函數(shù)代碼,使消息分發(fā)函數(shù)能夠截獲并應(yīng) 答監(jiān)控程序的握手消息,無(wú)需在應(yīng)用程序中增加代碼配合監(jiān)控,可擴(kuò)展性好, 并且可以實(shí)現(xiàn)準(zhǔn)確的實(shí)時(shí)監(jiān)控。
圖1為本發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控系統(tǒng)結(jié)構(gòu)圖; 圖2為本發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法流程圖; 圖3為將DLL代碼注入進(jìn)程的流程圖;圖4為本發(fā)明注入DLL修改消息分發(fā)函數(shù)代碼流程圖。
具體實(shí)施方式
本發(fā)明的基本思想是采用動(dòng)態(tài)鏈接庫(kù)(DLL)注入的方式修 文應(yīng)用程序 加載的消息分發(fā)函數(shù)代碼,使消息分發(fā)函數(shù)能夠截獲并應(yīng)答監(jiān)控程序的握手消 息。下面結(jié)合具體實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。圖1為本發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控系統(tǒng)結(jié)構(gòu)圖,如圖1所示,本 發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控系統(tǒng)包括監(jiān)控程序、配置文件和應(yīng)用程序。 其中,應(yīng)用程序用于完成計(jì)費(fèi)功能等多種業(yè)務(wù)功能;監(jiān)控程序用于根據(jù)配置文 件配置并啟動(dòng)被監(jiān)控應(yīng)用程序,以及對(duì)被監(jiān)控應(yīng)用程序的運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān) 控;配置文件用于保存應(yīng)用程序的基本信息及監(jiān)控進(jìn)程使用的全局配置信息, 如應(yīng)用程序路徑、最大超時(shí)應(yīng)答次數(shù)、發(fā)送握手消息的頻率、最大進(jìn)程重啟次 數(shù)等。圖2為本發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法流程圖,如圖2所示,本 發(fā)明基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法包括以下步驟步驟20~步驟21:監(jiān)控程序啟動(dòng)后,從配置文件中讀取被監(jiān)控應(yīng)用程序配 置信息,并分別創(chuàng)建被監(jiān)控應(yīng)用程序進(jìn)程,即啟動(dòng)被監(jiān)控應(yīng)用程序。為了保證在系統(tǒng)重新啟動(dòng)后監(jiān)控程序能夠自動(dòng)啟動(dòng), 一般將監(jiān)控程序添加 到系統(tǒng)啟動(dòng)項(xiàng)中,而配置文件中被監(jiān)控應(yīng)用程序配置信息, 一般包括應(yīng)用程序 的if各徑、應(yīng)用程序最大應(yīng)答超時(shí)次^:、應(yīng)用程序的窗口類(lèi)名和應(yīng)用程序的窗口 名稱(chēng)等。其中,應(yīng)用程序的路徑可以配置絕對(duì)路徑,也可以配置相對(duì)路徑,當(dāng) 配置的是相對(duì)路徑時(shí),監(jiān)控程序在創(chuàng)建被監(jiān)控應(yīng)用程序進(jìn)程時(shí)會(huì)自動(dòng)加上當(dāng)前 運(yùn)行路徑作為應(yīng)用程序^各徑,而對(duì)于應(yīng)用程序的窗口類(lèi)名和窗口名稱(chēng),可以選 擇不做配置。這里,配置文件的內(nèi)容可以在監(jiān)控程序提供的界面上配置,也可 以根據(jù)配置文件的格式直接在配置文件中修改。此外,監(jiān)控程序創(chuàng)建被監(jiān)控應(yīng)用程序進(jìn)程后,會(huì)保存進(jìn)程標(biāo)識(shí)(ID)、進(jìn)程 句柄及進(jìn)程接收握手消息的窗口句柄等信息,其中,進(jìn)程ID主要用于被監(jiān)控程序信息顯示用;進(jìn)程句柄用于對(duì)進(jìn)程進(jìn)行操作,例如強(qiáng)制關(guān)閉進(jìn)程等;而進(jìn)程 接收握手消息的窗口句柄可以通過(guò)兩種方式荻取如果被監(jiān)控應(yīng)用程序配置信 息中已經(jīng)指定了窗口類(lèi)名和窗口名,則直接調(diào)用窗口查找函數(shù)獲取;否則,遍 歷系統(tǒng)所有的窗口 ,如果某窗口所在進(jìn)程的進(jìn)程ID與所述被監(jiān)控應(yīng)用程序進(jìn)程 的進(jìn)程ID相同,則確定該窗口為進(jìn)程的握手消息接收窗口 。步驟22:被監(jiān)控應(yīng)用程序進(jìn)程創(chuàng)建成功后,監(jiān)控程序?qū)⒆⑷隓LL的代碼 注入所述進(jìn)程中。這里,將注入DLL的代碼注入進(jìn)程為在進(jìn)程中創(chuàng)建一個(gè)入口函數(shù)為DLL 加載函數(shù)、參數(shù)為需要注入應(yīng)用程序的DLL名稱(chēng)的線(xiàn)程并執(zhí)行。所述注入應(yīng)用 程序的DLL能夠從系統(tǒng)DLL中查到消息分發(fā)函數(shù)的地址,并修改消息分發(fā)函 數(shù)代碼,使其能夠截獲并應(yīng)答監(jiān)控程序發(fā)來(lái)的握手消息。圖3為將DLL代碼注入進(jìn)程的流程圖,如圖3所示,將DLL代碼注入進(jìn) 程包括步驟221~步驟222:在進(jìn)程的地址空間申請(qǐng)一塊內(nèi)存,其名稱(chēng)可以為 pDLLName,并將注入DLL的名稱(chēng)拷貝到所述內(nèi)存。步驟223 步驟224:獲取DLL加載函數(shù)的地址pLoadFunc,并調(diào)用遠(yuǎn)程線(xiàn) 程創(chuàng)建函數(shù)在進(jìn)程空間創(chuàng)建一個(gè)入口函數(shù)為pLoadFunc,參數(shù)為注入DLL名稱(chēng)的線(xiàn)程。步驟225:線(xiàn)程執(zhí)行完畢,關(guān)閉線(xiàn)程句柄。 步驟23:注入DLL修改消息分發(fā)函數(shù)代碼。圖4為本發(fā)明注入DLL修改消息分發(fā)函數(shù)代碼流程圖,如圖4所示,本發(fā) 明注入DLL修改消息分發(fā)函數(shù)代碼包括步驟231:設(shè)置與消息分發(fā)函數(shù)參數(shù)類(lèi)型和返回類(lèi)型相同的函數(shù)指針x,如 指針JmpFunc,申請(qǐng)一塊內(nèi)存,將設(shè)置的指針JmpFunc指向所申請(qǐng)的內(nèi)存。步驟232:設(shè)置一個(gè)函數(shù)y,如函數(shù)MyDispacth,所設(shè)置函數(shù)的參數(shù)類(lèi)型 和返回類(lèi)型與消息分發(fā)函數(shù)相同。這里,所設(shè)置的函數(shù)能夠判斷應(yīng)用程序進(jìn)程收到的消息是否為握手消息,如杲是握手消息,則調(diào)用消息發(fā)送函數(shù)給監(jiān)控程序回復(fù)應(yīng)答消息后,調(diào)用指針JmpFunc;否則直接調(diào)用指針JmpFunc。步驟233 步驟234:獲取系統(tǒng)消息分發(fā)函數(shù)的代碼地址,并將消息分發(fā)函 數(shù)代碼的前五個(gè)字節(jié)拷貝到指針JmpFunc所指向內(nèi)存的前五個(gè)字節(jié)。步驟235:修改消息分發(fā)函數(shù)代碼的第一個(gè)字節(jié)為跳轉(zhuǎn)(JMP)指令,后四 個(gè)字節(jié)為跳轉(zhuǎn)到函數(shù)MyDispatch的字節(jié)數(shù),即當(dāng)前地址到函數(shù)MyDispacth的 距離。步驟236:將指針JmpFunc所指向內(nèi)存的第六個(gè)字節(jié)修改為JMP指令,其 后四個(gè)字節(jié)為跳轉(zhuǎn)到消息分發(fā)函數(shù)第六個(gè)字節(jié)的字節(jié)數(shù),即當(dāng)前地址到消息分 發(fā)函數(shù)第六個(gè)字節(jié)的距離。步驟24:監(jiān)控程序定時(shí)向所有的被監(jiān)控應(yīng)用程序發(fā)送握手消息。這里,監(jiān) 控程序按照應(yīng)用程序配置信息中設(shè)置的發(fā)送握手消息頻率向應(yīng)用程序發(fā)送握手 消息。步驟25 步驟29:應(yīng)用程序進(jìn)程每次收到消息后,調(diào)用步驟23所述修改后 的消息分發(fā)函數(shù),修改后的消息分發(fā)函數(shù)判斷收到的消息是否為監(jiān)控程序發(fā)送 的握手消息,如果是,向監(jiān)控程序返回應(yīng)答消息后,執(zhí)行正常的消息分發(fā)流程; 否則,直接執(zhí)行正常的消息分發(fā)流程。本發(fā)明調(diào)用修改后消息分發(fā)函數(shù)時(shí)的指令執(zhí)行順序?yàn)閼?yīng)用程序每次收到 消息后,調(diào)用消息分發(fā)函數(shù)。消息分發(fā)函數(shù)第一條指令為跳轉(zhuǎn)指令,根據(jù)跳轉(zhuǎn) 地址跳轉(zhuǎn)到函數(shù)MyDispath;函數(shù)MyDispatch判斷收到的消息是否為握手消息, 如果是則調(diào)用消息發(fā)送函數(shù)向監(jiān)控進(jìn)程發(fā)送應(yīng)答消息后調(diào)用指針JmpFunc;否 則,直接調(diào)用指針JmpFunc;指針JmpFunc所指向內(nèi)存前五個(gè)字節(jié)的指令為消 息分發(fā)函數(shù)前五個(gè)字節(jié)指令,第六個(gè)字節(jié)為跳轉(zhuǎn)指令,跳轉(zhuǎn)到消息分發(fā)函數(shù)的 第六個(gè)字節(jié),即執(zhí)行完消息分發(fā)函數(shù)的前五個(gè)字節(jié)指令后,繼續(xù)從消息分發(fā)函 數(shù)的第六個(gè)字節(jié)開(kāi)始執(zhí)行,完成正常的消息分發(fā)流程。如果監(jiān)控程序發(fā)出握手消息后在設(shè)置的應(yīng)答時(shí)間閾值內(nèi)沒(méi)有收到應(yīng)答消 息,則認(rèn)為應(yīng)答超時(shí),當(dāng)所述應(yīng)用程序應(yīng)答超時(shí)次數(shù)大于該應(yīng)用程序配置信息中的應(yīng)用程序最大應(yīng)答超時(shí)次數(shù)時(shí),監(jiān)控程序重啟所述應(yīng)用程序進(jìn)程及其相關(guān) 應(yīng)用程序進(jìn)程。這里,監(jiān)控程序在重啟應(yīng)用程序會(huì)先結(jié)束所述被監(jiān)控應(yīng)用程序進(jìn)程,從而 避免出錯(cuò)進(jìn)程未結(jié)束而導(dǎo)致新進(jìn)程無(wú)法啟動(dòng)的情況。并且,所有被監(jiān)控應(yīng)用程序重啟次數(shù)超過(guò)配置文件中設(shè)定的超時(shí)次數(shù)閾值 時(shí),重啟服務(wù)器以防止因某些資源限制,如數(shù)據(jù)庫(kù)連接池已滿(mǎn),而導(dǎo)致應(yīng)用程 序無(wú)法正常運(yùn)行的情況。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法,其特征在于,該方法包括a、監(jiān)控程序啟動(dòng)后,根據(jù)配置文件中被監(jiān)控應(yīng)用程序的配置信息分別創(chuàng)建被監(jiān)控應(yīng)用程序進(jìn)程;b、所述被監(jiān)控應(yīng)用程序進(jìn)程創(chuàng)建成功后,監(jiān)控程序?qū)⒆⑷雱?dòng)態(tài)鏈接庫(kù)DLL的代碼注入所述創(chuàng)建成功的進(jìn)程;c、注入DLL修改所述創(chuàng)建成功進(jìn)程中的消息分發(fā)函數(shù)代碼;d、監(jiān)控程序定時(shí)向所有的被監(jiān)控應(yīng)用程序發(fā)送握手消息,被監(jiān)控應(yīng)用程序收到消息后,調(diào)用步驟c所述修改后的消息分發(fā)函數(shù),所述修改后的消息分發(fā)函數(shù)確定收到消息為監(jiān)控程序發(fā)送的握手消息時(shí),向監(jiān)控程序返回應(yīng)答消息。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述配置文件中的應(yīng)用程序 配置信息至少包括應(yīng)用程序的路徑、應(yīng)用程序最大應(yīng)答超時(shí)次數(shù)和發(fā)送握手 消息頻率。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟b所述將注入DLL的 代碼注入進(jìn)程為在進(jìn)程中創(chuàng)建一個(gè)入口函數(shù)為DLL加載函數(shù)、參數(shù)為注入 DLL名稱(chēng)的線(xiàn)程并執(zhí)行。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述DLL修改系統(tǒng)消息分 發(fā)函數(shù)代碼包括cl、設(shè)置與消息分發(fā)函數(shù)參數(shù)類(lèi)型和返回類(lèi)型相同的函數(shù)指針x,為所設(shè)置 的指針申請(qǐng)內(nèi)存;c2、設(shè)置函數(shù)y,所設(shè)置函數(shù)的參數(shù)類(lèi)型和返回類(lèi)型與消息分發(fā)函數(shù)相同; c3、將消息分發(fā)函數(shù)代碼的前五個(gè)字節(jié)拷貝到指針x所指向內(nèi)存的前五個(gè)字節(jié),并修改消息分發(fā)函數(shù)代碼的第一個(gè)字節(jié)為跳轉(zhuǎn)JMP指令,后四個(gè)字節(jié)為跳轉(zhuǎn)到函數(shù)y的字節(jié)數(shù);c4、將指針x所指向內(nèi)存的第六個(gè)字節(jié)修改為JMP指令,其后四個(gè)字節(jié)為跳轉(zhuǎn)到消息分發(fā)函數(shù)第六個(gè)字節(jié)的字節(jié)數(shù)。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,步驟c2所述函數(shù)y,用于 判斷被監(jiān)控應(yīng)用程序進(jìn)程收到的消息是否為監(jiān)控程序發(fā)送的握手消息,如果是, 則向監(jiān)控程序返回應(yīng)答信息后調(diào)用指針x;否則直接調(diào)用指針x。
6、 根據(jù)權(quán)利要求2所述的方法,其特征在于,設(shè)置應(yīng)答時(shí)間閾值,如果監(jiān) 控程序發(fā)出握手消息后在應(yīng)答時(shí)間閾值內(nèi)未收到應(yīng)答消息,則應(yīng)答超時(shí);當(dāng)所 述被監(jiān)控應(yīng)用程序應(yīng)答超時(shí)次數(shù)大于應(yīng)用程序最大應(yīng)答超時(shí)次數(shù)時(shí),監(jiān)控程序 重啟所述被監(jiān)控應(yīng)用程序進(jìn)程及其相關(guān)應(yīng)用程序進(jìn)程。
7、 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述重啟被監(jiān)控應(yīng)用程序之 前,該方法進(jìn)一步包括監(jiān)控程序結(jié)束所述被監(jiān)控應(yīng)用程序進(jìn)程。
8、 根據(jù)權(quán)利要求6所述的方法,其特征在于,設(shè)置超時(shí)次數(shù)閾值,該方法 進(jìn)一步包括所有被監(jiān)控應(yīng)用程序重啟次數(shù)超過(guò)設(shè)定的超時(shí)次數(shù)閾值時(shí),重啟 服務(wù)器。
全文摘要
本發(fā)明公開(kāi)一種基于窗口平臺(tái)的應(yīng)用程序監(jiān)控方法,該方法包括監(jiān)控程序啟動(dòng)后分別創(chuàng)建被監(jiān)控應(yīng)用程序進(jìn)程;監(jiān)控程序?qū)⒆⑷雱?dòng)態(tài)鏈接庫(kù)(DLL)的代碼注入進(jìn)程;注入DLL修改進(jìn)程中消息分發(fā)函數(shù)代碼;監(jiān)控程序定時(shí)向所有的被監(jiān)控應(yīng)用程序發(fā)送握手消息,被監(jiān)控應(yīng)用程序收到消息后,調(diào)用修改后的消息分發(fā)函數(shù),修改后的消息分發(fā)函數(shù)確定收到的消息為監(jiān)控程序發(fā)送的握手消息后,向監(jiān)控程序返回應(yīng)答消息。本發(fā)明的監(jiān)控方法采用DLL注入的方式修改系統(tǒng)消息分發(fā)函數(shù)代碼,使系統(tǒng)消息分發(fā)函數(shù)能夠截獲并應(yīng)答監(jiān)控程序的握手消息,不用在應(yīng)用程序中增加代碼配合監(jiān)控,可擴(kuò)展性好,并且可以實(shí)現(xiàn)準(zhǔn)確的實(shí)時(shí)監(jiān)控。
文檔編號(hào)H04Q3/00GK101227630SQ20081005707
公開(kāi)日2008年7月23日 申請(qǐng)日期2008年1月29日 優(yōu)先權(quán)日2008年1月29日
發(fā)明者劉少情 申請(qǐng)人:中興通訊股份有限公司