修復動態(tài)鏈接庫文件的方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及通信領域,特別涉及一種修復動態(tài)鏈接庫文件的方法和裝置。
【背景技術】
[0002]隨著計算機技術的發(fā)展,客戶端軟件的種類越來越多,各個軟件廠商為了能縮小軟件體積,便于獨立開發(fā),更好的發(fā)布迭代,減少開發(fā)人員之間的相互依賴,普遍在開發(fā)軟件時采用動態(tài)鏈接庫(Dynamic Link Library, DLL)的方法,來讓各個模塊之間保持相互獨立,從而有助于促進代碼重用和內(nèi)存的有效使用。但與此同時,這樣做也會帶來一些難以避免的問題,比如:動態(tài)鏈接庫的版本與可執(zhí)行程序的版本不一致,動態(tài)鏈接庫被誤刪或改名等等,這些情況都會導致程序啟動或運行時發(fā)生DLL文件缺失,進而導致異常結束,甚至崩潰。
[0003]目前,一般的軟件無法處理自身DLL文件缺失的情況,只能任由程序異常結束,好的軟件開發(fā)商會在安裝程序前提示用戶DLL文件缺失。
[0004]但是,上述方法的缺點是,用戶在看到DLL文件缺失的對話框時,經(jīng)常會不知所措,即使用戶手動下載了 DLL文件,也會由于不知道正確的保存路徑而導致無法安裝,因此,手動修復DLL文件對用戶的要求較高,較難實現(xiàn)。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明實施例提供了一種修復動態(tài)鏈接庫文件的方法和裝置,以提高修復DLL文件的易用性,降低對用戶的要求。所述技術方案如下:
[0006]一方面,提供了一種修復動態(tài)鏈接庫文件的方法,包括:
[0007]讀取可執(zhí)行文件中的導入段;
[0008]根據(jù)所述導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失;
[0009]當接收到運行所述可執(zhí)行文件的指令時,提示所述DLL文件丟失,調(diào)用所述DLL文件的安裝包修復所述DLL文件。
[0010]另一方面,提供了一種修復動態(tài)鏈接庫文件的裝置,包括:
[0011]讀取模塊,用于讀取可執(zhí)行文件中的導入段;
[0012]確定模塊,用于根據(jù)所述導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失;
[0013]修復模塊,用于當接收到運行所述可執(zhí)行文件的指令時,提示所述DLL文件丟失,調(diào)用所述DLL文件的安裝包修復所述DLL文件。
[0014]本發(fā)明實施例提供的技術方案帶來的有益效果是:通過讀取可執(zhí)行文件中的導入段,根據(jù)所述導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失,當接收到運行所述可執(zhí)行文件的指令時,提示所述DLL文件丟失,調(diào)用所述DLL文件的安裝包修復所述DLL文件,實現(xiàn)了智能感知DLL文件丟失,并在提示用戶后自動進行修復,提高了修復DLL文件的易用性,無需用戶手動執(zhí)行下載和安裝等過程,降低對用戶的要求,操作簡單,方便了用戶使用,也提高了修復效率。
【附圖說明】
[0015]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1是本發(fā)明實施例1提供的修復動態(tài)鏈接庫文件的方法流程圖;
[0017]圖2是本發(fā)明實施例1提供的導入段示意圖;
[0018]圖3是本發(fā)明實施例2提供的修復動態(tài)鏈接庫文件的方法流程圖;
[0019]圖4是本發(fā)明實施例3提供的修復動態(tài)鏈接庫文件的裝置一種結構圖;
[0020]圖5是本發(fā)明實施例3提供的修復動態(tài)鏈接庫文件的裝置另一種結構圖;
[0021]圖6是本發(fā)明實施例4提供的終端結構圖。
【具體實施方式】
[0022]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明實施方式作進一步地詳細描述。
[0023]實施例1
[0024]參見圖1,本實施例提供了一種修復動態(tài)鏈接庫文件的方法,包括:
[0025]101:讀取可執(zhí)行文件中的導入段;
[0026]通常,可執(zhí)行文件中都會包含有導入段,導入段中列出了可執(zhí)行文件所需要的DLL文件,以及可執(zhí)行文件從每個DLL文件中引用的符號,包括函數(shù)、變量等等。
[0027]例如,參見圖2,為可執(zhí)行文件not印ad.exe的部分內(nèi)容示意圖。其中包括導入段,導入段中列出了可執(zhí)行文件not印ad.exe所需的DLL文件,包括:ADVAPI32.dll和
KERNEL32.dll......以及每個DLL文件中用到的函數(shù)。如ADVAPI32.dll文件中用到函數(shù)
RegSetValueExW、RegQueryValueExW、RegCloseKey......這里不--列出。
[0028]102:根據(jù)該導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失;
[0029]本實施例中,DLL文件信息至少包括DLL文件名,進一步地,還可以包括該DLL文件所屬的可執(zhí)行文件名。所述預先建立的對應關系可以以列表的形式存儲在本地設備中。該對應關系中可以包括=DLL文件名與對應的保存路徑,或者,也可以包括:DLL文件名與對應的保存路徑及可執(zhí)行文件名,本實施例對此不做具體限定。其中,DLL文件名可以作為索弓丨,用來查找對應的保存路徑。
[0030]103:當接收到運行該可執(zhí)行文件的指令時,提示該DLL文件丟失,調(diào)用該DLL文件的安裝包修復該DLL文件。
[0031]其中,由于已確定DLL文件丟失,因此,該可執(zhí)行文件的當前運行過程會異常結束,即無法運行,提示該DLL文件丟失,可以方便用戶及時了解可執(zhí)行文件運行失敗的原因,以便確定后續(xù)操作。
[0032]另外,提示DLL文件丟失可以采用彈出對話框的形式,如TIPS窗口,并在其中顯示提示內(nèi)容,當然,也可以采用其它方式來實現(xiàn),本實施例對此不做具體限定。
[0033]本實施例中,DLL文件的安裝包可以由本地設備的操作系統(tǒng)提供,在確定進行修復時,可以自動調(diào)用該安裝包從而執(zhí)行DLL文件的安裝,確??蓤?zhí)行文件在下次運行時能夠正常執(zhí)行。該安裝過程為自動進行,用戶無需關心DLL文件的保存路徑在哪里,因此,極大地降低了對用戶的要求,用戶可以根據(jù)提示自動完成DLL文件的修復,方便了用戶使用。
[0034]本實施例中,所述根據(jù)該導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失,可以包括:
[0035]根據(jù)該導入段中記錄的DLL文件信息,在預先建立的DLL文件與保存路徑的對應關系查找得到該導入段中記錄的各個DLL文件的保存路徑;
[0036]對查找得到的每個DLL文件的保存路徑,判斷該保存路徑下是否保存有對應的DLL文件;
[0037]如果存在保存路徑下未保存有對應的DLL文件,則確定該未保存的DLL文件丟失。
[0038]本實施例中,所述調(diào)用該DLL文件的安裝包修復該DLL文件之前,還可以包括:
[0039]結束該可執(zhí)行文件的當前運行過程。
[0040]本實施例中,所述調(diào)用該DLL文件的安裝包修復該DLL文件,可以包括:
[0041 ] 詢問用戶是否對該DLL文件進行修復;
[0042]在得到該用戶的確認后,調(diào)用該DLL文件的安裝包修復該DLL文件。
[0043]本實施例中,所述方法還可以包括:
[0044]當再次接收到運行該可執(zhí)行文件的指令時,判斷修復該DLL文件是否完成;
[0045]如果修復該DLL文件完成,則響應該再次接收到的指令運行該可執(zhí)行文件;
[0046]如果修復該DLL文件未完成,則拒絕響應該再次接收到的指令或等待該修復完成后再響應該再次接收到的指令。
[0047]本實施例提供的上述方法,通過讀取可執(zhí)行文件中的導入段,根據(jù)所述導入段中記錄的DLL文件信息,以及預先建立的DLL文件與保存路徑的對應關系,確定有動態(tài)鏈接庫DLL文件丟失,當接收到運行所述可執(zhí)行文件的指令時,提示所述DLL文件丟失,調(diào)用所述DLL文件的安裝包修復所述DLL文件,實現(xiàn)了智能感知DLL文件丟失,并在提示用戶后自動進行修復,提高了修復DLL文件的易用性,無需用戶手動執(zhí)行下載和安裝等過