欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

軟件升級方法和系統(tǒng)與流程

文檔序號:12041423閱讀:377來源:國知局
軟件升級方法和系統(tǒng)與流程
本發(fā)明涉及數(shù)據(jù)處理設備的軟件處理技術(shù)領域,尤其涉及一種軟件升級方法和系統(tǒng)。

背景技術(shù):
現(xiàn)有的數(shù)據(jù)處理設備(如計算機、智能手機等)的軟件升級方法通常有兩種,一種是基于安裝包的升級方式,另一種是基于cab升級包的升級方式。所述基于安裝包的升級方式很簡單,就是從服務器上下載一個全新的安裝包,待下載完成后啟動之,安裝包會完成對舊版本的卸載和新版本的安裝工作。這種基于安裝包的升級方式的缺點是:帶寬浪費嚴重,即使是一個小的功能改動,也需要用戶下載幾兆(M)甚至上百兆字節(jié)的安裝包,絕大多數(shù)沒有變化的文件也會被一同下載和替換沒從而造成帶寬浪費。所述基于cab升級包的方式更加有針對性,所述cab升級包是一種微軟WINDOWS操作系統(tǒng)的壓縮包,其中包括升級文件。在這種方式中,只是將軟件的版本x到版本y之間的差異文件按照操作系統(tǒng)的標準格式(cab格式)進行打包得到cab升級包,待升級程序?qū)⒃揷ab升級包在下載到用戶本地設備后啟動該cab升級包,cab升級包會按照其內(nèi)部的升級邏輯和文件完成指定文件的更新和操作,從而實現(xiàn)軟件版本的升級。但是這種基于cab升級包的升級方式的缺點是:軟件的版本數(shù)量的增多會導致制作cab升級包的工作量激增。例如,如果一個產(chǎn)品當前的版本號是m,而運營環(huán)境中支持的最小版本號是n,那就意味著當前的運營環(huán)境下會有m-n個不同的版本同時在被用戶所使用,那么采用這種升級方式就意味著需 要為這m-n個不同的版本分別量身定制一個不同的cab升級包,而且每次升級皆是如此,因此制作多版本cab升級包的工作量是非常巨大的,導致維護軟件升級的成本大大增加。

技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的主要目的在于提供一種軟件升級方法和系統(tǒng),以節(jié)約帶寬資源和降低軟件升級的工作量。本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:一種軟件升級方法,包括:客戶端向服務器上報軟件升級請求,該升級請求中攜帶本地待升級軟件的文件信息;服務器根據(jù)升級請求中的待升級軟件的文件信息確定與最新版本軟件的差異,根據(jù)軟件差異生成升級指令信息并下發(fā)給客戶端;客戶端根據(jù)收到的升級指令信息中的指令下載更新相應文件并執(zhí)行相應的本地升級操作。一種軟件升級系統(tǒng),包括:設置在客戶端中的升級模塊,用于向服務器上報攜帶本地待升級軟件文件信息的軟件升級請求,并根據(jù)服務器返回的升級指令信息中的指令下載更新相應文件并執(zhí)行相應的本地升級操作;設置在服務器的升級服務模塊,用于接收客戶端中的所述升級模塊發(fā)送的升級請求,并根據(jù)該升級請求中的待升級軟件的文件信息確定與最新版本軟件的差異,根據(jù)軟件差異生成升級指令信息并下發(fā)給客戶端的升級模塊。與現(xiàn)有技術(shù)相比,本發(fā)明的本質(zhì)是將cab包中的處理邏輯遷移到數(shù)據(jù)處理設備客戶端的升級模塊中,并由服務器根據(jù)待升級軟件的文件信息確定與最新版本軟件的差異,根據(jù)軟件差異動態(tài)生成升級指令信息并下發(fā)給客戶端的升級模塊;升級模塊根據(jù)服務器下發(fā)的升級指令完成文件的下載、更新、以及刪除、注冊COM組件等在現(xiàn)有技術(shù)中需要cab包執(zhí)行的操作。這樣服務器和客戶端之 間交互的信息少了,節(jié)約了帶寬資源,同時還可以規(guī)避掉原來手工制作cab包的工作,轉(zhuǎn)為由升級服務器根據(jù)用戶的版本情況動態(tài)組織升級指令,從而降低了了軟件升級的工作量,進而降低了維護軟件升級系統(tǒng)的運營成本。附圖說明圖1為本發(fā)明所述軟件升級方法的一種流程圖;圖2為本發(fā)明所述將查找到的操作指令集進行合并的一種示意圖;圖3為本發(fā)明所述方法中客戶端升級模塊的一種執(zhí)行流程圖;圖4為本發(fā)明所述軟件升級系統(tǒng)的一種構(gòu)成示意圖;圖5為服務器端的所述升級服務模塊的一種組成示意圖;圖6為客戶端的所述升級模塊的一種組成示意圖。具體實施方式下面結(jié)合附圖及具體實施例對本發(fā)明再作進一步詳細的說明。圖1為本發(fā)明所述軟件升級方法的一種流程圖。參見圖1,該流程包括:步驟101、客戶端向服務器上報軟件升級請求,該升級請求中攜帶本地待升級軟件的文件信息。步驟102、服務器根據(jù)升級請求中的待升級軟件的文件信息確定與最新版本軟件的差異,根據(jù)軟件差異生成升級指令信息并下發(fā)給客戶端。步驟103、客戶端根據(jù)收到的升級指令信息中的指令下載更新相應文件并執(zhí)行相應的本地升級操作。所述的客戶端可以是指有中央處理器(CPU)、內(nèi)存和操作系統(tǒng)提供軟件運行環(huán)境的計算系統(tǒng)上運行的軟件,所述計算系統(tǒng)典型的例子為臺式計算機、筆記本電腦,平板電腦以及具有計算能力的智能手機等手持設備及有計算能力的機器人設備等。本發(fā)明所述方法中所述客戶端側(cè)的操作由本地待升級軟件對應的升級模塊執(zhí)行,該升級模塊也是一個軟件程序,當其啟動后可以運行在一個與待升級軟件獨立的進程中。所述客戶端中的所述升級模塊發(fā)送的升級請求中的文件信息主要包括待升級軟件中所包含各個文件的文件名和版本信息,還可以進一步包括各個文件的HASH值和相對路徑等信息。所述服務器在收到所述升級請求后,根據(jù)該升級請求中的待升級軟件名稱查找該軟件的最新版本號,根據(jù)所述各文件的文件名和版本信息與最新版本軟件進行對比,確定文件差異和版本差異;如果沒有差異則說明不需要升級軟件,此時向客戶端返回不需要升級的指令,所述升級模塊收到該指令后停止升級操作;如果有差異,則再根據(jù)軟件版本差異動態(tài)生成升級指令信息。所述服務器根據(jù)軟件版本差異動態(tài)生成升級指令信息的具體方法包括如下步驟11)至13):11)根據(jù)所述文件差異查找最新版本軟件中的新增文件和更改文件,將所述新增文件和更改文件的清單信息組成待更新文件清單信息。所述待更新文件清單信息包含了從升級請求中的當前版本升級到最新版本時需要新增、修改和替換的文件列表,每個文件都包含文件的描述信息,比如文件名、相對路徑、文件大小、以及MD5校驗值等等。此處,可以由服務器針對待升級軟件維護一個所有文件最新版本的映射表,如下表1所示為該映射表的一種范例。文件名相對路徑大小最后修改版本AAA.dll%INSTALL_DIR%/BIN251320532BBB.dll%INSTALL_DIR%/BIN473220476CCC.png%INSTALL_DIR%/RES100420587DDD.bmp%INSTALL_DIR%/RES131320476表1如表1所示,所述映射表中包括待升級軟件的所有文件的最新版本的清單信息,每一條文件清單信息至少包括文件名、下載路徑信息、相對路徑信息。上述表1中,由于服務器將同一軟件的所有文件存儲在該軟件對應的一個統(tǒng)一總目錄下,且在該目錄下的相對路徑與該軟件在客戶端中的安裝目錄下的相對路徑完全一致,因此表1中所述相對路徑可以代表其下載路徑,只 要在相對路徑前面統(tǒng)一加上該軟件在服務器上的總目錄即可,因此在表1中只維護了相對路徑,只要附帶上總目錄的地址就可以相加得到下載路徑信息。當然,表1中也可以包括絕對的下載路徑信息,客戶端不必加目錄地址,可以從該絕對的下載路徑信息下載相應文件。另外,所述映射表中的文件清單信息中還要包括文件大小、MD5校驗值(在表的寬度所限,在表1中并沒有體現(xiàn))等、以及最后修改版本信息。當服務器收到升級請求后,服務器則用升級請求中攜帶的待升級軟件的當前文件清單過濾上述映射表,將最新版本軟件中的新增文件和更改文件保留下來組織成一個待更新文件的清單。所述新增文件就是客戶端待升級軟件沒有的文件;所述更改文件就是客戶端待更新軟件中有相同文件名的文件,但是文件的版本信息與最新版本不同,說明其內(nèi)容發(fā)生了改變,需要將客戶端的待升級軟件中的同名文件進行更改。12)根據(jù)所述版本差異查找所有版本號高于所述升級請求中所述版本信息的所述待升級軟件的操作指令集,并合并所查找到的操作指令集。本發(fā)明中,每個軟件版本的更新都可能會伴隨有一個操作指令集,一次版本升級中可能有若干這樣的操作指令,所以最終會以集合的形式組織起來。所述操作指令集中的每一條操作指令包括:本地客戶端可識別的操作指令名稱、以及該指令對應操作的目標文件的相對路徑和文件名信息,還可以進一步包括對目標文件進行處理的輔助程序名稱。如下表2所示為操作指令集的實例,為了方便說明,表2中進一步包括了對每一操作指令的用途說明。表2服務器中針對每個軟件版本的更新都可能會伴隨有一個操作指令集,每 一操作指令集都有一版本號。服務器在收到升級請求后,查找待升級軟件的所有版本號高于所述升級請求中所述版本號的操作指令集,最終返回給升級模塊的指令集要將查找到的指令集進行合并。圖2為本發(fā)明所述將查找到的操作指令集進行合并的一種示意圖。如圖2所示,假設高于升級請求中所述版本號的操作指令集為版本號(version)為20476的操作指令集201和版本號為20532的操作指令集202,則合并這兩個操作指令集,得到最終的指令集203。13)將所述更新文件清單信息和合并后的所述操作指令集作為所述升級指令信息。所述升級指令信息最終被服務器以XML格式進行組織得到一張數(shù)據(jù)表下發(fā)給客戶端的升級模塊。該XML數(shù)據(jù)表主要包含“更新文件清單”、“操作指令集合”以及一些其他的附加信息。例如所述服務器還進一步查找所述待升級軟件的最新版本的功能描述信息,將該功能描述信息填加到所述升級指令信息中。所述功能描述信息用于對此次升級帶給用戶的新功能進行說明,包含一些描述信息和預覽圖片,以便用戶在升級之前就能對此次升級的效果有一個了解。一個典型的XML格式的升級指令表的內(nèi)容如下XML代碼所示:本發(fā)明所述的升級系統(tǒng)中,設置在客戶端中的升級模塊執(zhí)行的操作主要 包括:向服務器上報攜帶本地待升級軟件版本信息的軟件升級請求、根據(jù)服務器返回的升級指令信息中的指令下載文件并更新本地的相應文件、以及根據(jù)所述升級指令執(zhí)行相應的本地升級操作。圖3為本發(fā)明所述方法中客戶端升級模塊的一種執(zhí)行流程圖。參見圖3,該流程包括:步驟301、客戶端的升級模塊與服務器交互判斷是否要自升級,即判斷服務器是否有比本地更新版本的升級模塊,如果是則下載新版本的升級模塊的文件并替換本地原有的升級模塊文件,并重新啟動新版本的升級模塊執(zhí)行下一步驟302;否則直接執(zhí)行下一步驟302。由于升級模塊本身非常精簡,其包括的文件數(shù)量也都是控制在1至2個以內(nèi),所以整個升級模塊的自身升級過程非常簡單和快速。當然本步驟301為可選步驟,也可以跳過本步驟,直接執(zhí)行步驟302。步驟302、升級模塊與服務器交互判斷是否需要升級軟件,即向服務器上報軟件升級請求,該升級請求中攜帶本地待升級軟件的文件信息,其中包括該待升級軟件中所包含各個文件的文件名和版本信息,還可以進一步包括各個文件的HASH值和相對路徑等信息,服務器根據(jù)所述各文件的文件名和版本信息與最新版本軟件進行對比,確定文件差異和版本差異,如果有差異則服務器按照前述描述的方法,根據(jù)軟件版本差異動態(tài)生成所述升級指令信息并下發(fā)給客戶端的升級模塊,并執(zhí)行下一步驟303;如果沒有軟件差異則通知客戶端的升級模塊升級失敗并退出本流程。步驟303、所述升級指令信息中包括待更新文件清單,且每一條文件清單信息包括文件名、下載路徑信息、相對路徑信息,因此升級模塊可以根據(jù)所述待更新文件清單中的文件下載路徑信息下載相應的文件。另外,如果所述升級指令信息中包括新版本軟件的功能描述信息,則所述客戶端在收到所述升級指令信息后、本步驟303之前,進一步包括:顯示所述升級指令信息中包含的功能描述信息,以便用戶在升級之前就能對此次升級的效果有一個了解。步驟304、按照待更新文件清單中的相對路徑信息將下載的文件更新到本地待升級軟件安裝目錄的所述相對路徑下。本步驟304也可以稱為舊版本和新版本差異文件的合并,即將下載到的新文件替換到待升級軟件安裝目錄下的舊版本文件。在很多情況下,待替換的目標文件可能暫時無法修改或替換(如正在被殺毒軟件掃描,或正在被某個進程使用),那就需要對這些情況進行全方位的安全機制進行保障,因為待升級軟件的各個程序文件通常都是相互依賴的,如果有一個文件沒有替換成功,極有可能導致程序無法再次運行。所以,本發(fā)明針對這個問題做了如下的兩項安全保障機制:a)執(zhí)行文件的合并(即更新文件)操作前,判斷待升級軟件是否正在運行,如果有在運行,則提示用戶關(guān)閉該軟件,關(guān)閉后再更新相應文件,否則直接更新相應文件。本發(fā)明所述升級模塊和待升級軟件是運行在兩個進程的,關(guān)閉待升級軟件不會對當前的升級模塊造成影響。b)文件合并前,備份本地的待更新的原文件,即將待替換的舊版本文件備份到一個臨時目錄下,之后進行文件更新。如果更新過程中發(fā)現(xiàn)有某一個文件更新失敗,則判斷這個文件是否必須要更新成功,如果是則說明這個文件對程序的正常運行是不可或缺的,必須用所述備份文件還原所有已經(jīng)更新的文件。這樣做的目的是保證“雖然升級失敗,但舊版本依然可以運行”。而如果這個文件不是必須要替換成功的,則可以將該文件的最新下載文件注冊到操作系統(tǒng)(如WINDOWS系統(tǒng))的重啟替換服務中,待系統(tǒng)重啟時啟動替換服務來更新該文件。具體如何判斷所述文件是否必須要替換成功,則可以依據(jù)更新文件清單中的“關(guān)鍵文件(keyfile)”字段來判斷,這種情況下需要服務器在生成更新文件清單時,每個文件的描述信息中還需要包括一個“關(guān)鍵文件”字段,用來標識該文件是否為關(guān)鍵文件即是否必須替換成功,例如:絕大多數(shù)底層組件是程序運行必須的,就會被作為keyfile,而如果是擴展資源包和插件等,則對整個系統(tǒng)的正常運行不會造成很大的影響,則不用作為keyfile??蛻舳嗽谀硞€文件更新失敗時判斷該文件的“關(guān)鍵文件” 字段,如果是關(guān)鍵文件則判定必須要替換成功,否則不是必須替換成功的文件。步驟305、完成文件合并后,還要根據(jù)所述升級指令信息中的操作指令集執(zhí)行相應的本地升級操作。所述操作指令集中的每一條操作指令包括:本地客戶端可識別的操作指令名稱、以及該指令對應操作的目標文件的相對路徑和文件名信息。所述升級模塊針對每一條操作指令,從待升級軟件安裝目錄的所述相對路徑中查找到與該操作指令所指文件名相同的目標文件,并對該目標文件執(zhí)行所述操作指令名稱對應的操作。比如對文件列表中的某個COM組件進行注冊、刪除某個目標文件、采用操作指令中指定的程序處理某個目標文件等等。在實際應用過程中,由于直接下發(fā)完整的文件會非常占用帶寬,因為一個幾M大小的文件可能因為一點小小的修改就要讓客戶端下載整個文件,這樣既浪費時間又浪費網(wǎng)絡帶寬,所以本發(fā)明還可以實現(xiàn)一種節(jié)省帶寬和文件下載時間的實施例。在該實施例中,所述客戶端向服務器端發(fā)送的升級請求中的文件信息中進一步包括各文件的HASH值;并且,所述服務器在查找出最新版本軟件中的更改文件后,根據(jù)該更改文件的文件名在所述升級請求中查到對應的文件HASH值,再根據(jù)該HASH值查詢服務器端存儲的與該HASH值相同的原始文件,將該原始文件與最新版本的同名文件進行二進制對比,生成二進制差異文件,用該二進制差異文件的下載路徑信息代替所述待更新文件清單中的同名文件的下載路徑信息,即該更新文件的信息包括:文件名、二進制差異文件的下載路徑信息、相對路徑信息等。所述二進制差異文件通常稱為diff文件,該diff文件的體積很小,其中描述了需要對舊版本文件進行哪些二進制級別的增刪改操作來生成一個新版本的文件。比如在x處刪除2個byte的數(shù)據(jù),在y除修改3個byte的數(shù)據(jù)等等。至于如何將該原始文件與最新版本的同名文件進行二進制對比,生成二進制差異文件可以采用現(xiàn)有的技術(shù)手段,例如在LINUX操作系統(tǒng)中,可以 采用diff操作命令來生成兩個文件的二進制差異文件。另外,由于服務器端生成一個diff文件的時間成本比較高,所以生成的diff文件及原始文件的HASH值都可以存儲下來,下一次收到升級請求時,可以根據(jù)文件的HASH值直接查找到對應的diff文件,并直接將diff文件的下載路徑替換到待更新文件的清單中,不必重新生成biff文件。所述客戶端根據(jù)所述待更新文件清單信息中的下載路徑信息下載到相應的二進制差異文件后,按照對應的相對路徑信息,進一步將本地待升級軟件安裝目錄的所述相對路徑下的同名文件與所述二進制差異文件進行合并,從而產(chǎn)生完整的新文件。至于如何合并二進制差異文件同樣可以采用現(xiàn)有的技術(shù)手段,本文不再贅述。上述實施例中,對于僅僅修改了內(nèi)容的文件,客戶端可以只下載其對應的二進制差異文件,而該二進制差異文件又非常小,從而節(jié)省了帶寬資源和文件的下載時間。與上述方法對應,本發(fā)明還公開了一種軟件升級系統(tǒng),用于執(zhí)行本發(fā)明的所述方法。圖4為本發(fā)明所述軟件升級系統(tǒng)的一種構(gòu)成示意圖。參見圖4,該軟件升級系統(tǒng)包括:設置在客戶端中的升級模塊401,用于向服務器上報攜帶本地待升級軟件文件信息的軟件升級請求,并根據(jù)服務器返回的升級指令信息中的指令下載更新相應文件并執(zhí)行相應的本地升級操作;設置在服務器的升級服務模塊402,用于接收客戶端中的所述升級模塊401發(fā)送的升級請求,并根據(jù)該升級請求中的待升級軟件的文件信息確定與最新版本軟件的差異,根據(jù)軟件差異生成升級指令信息并下發(fā)給客戶端的升級模塊401。圖5為服務器端的所述升級服務模塊的一種組成示意圖。參見圖5所示,在一種具體實施例中,服務器端的所述升級服務模塊402具體包括:版本差異確定模塊421,用于根據(jù)所述各文件的版本信息與最新版本軟 件進行對比,確定文件差異和版本差異;待更新文件確定模塊422,用于根據(jù)所述文件差異查找最新版本軟件中的新增文件和更改文件,將所述新增文件和更改文件的清單信息組成待更新文件清單信息;所述待更新文件清單信息至少包括:每一待更新文件的下載路徑信息、相對路徑等信息;操作指令確定模塊423,用于根據(jù)所述版本差異查找所有版本號高于所述升級請求中所述版本信息的待升級軟件的操作指令集,并合并所查找到的操作指令集;所述操作指令集中的每一條操作指令至少包括:本地客戶端可識別的操作指令名稱、以及該指令對應操作的目標文件的相對路徑和文件名信息;升級指令合成發(fā)送模塊424,用于將所述待更新文件清單信息和合并后的所述操作指令集作為所述升級指令信息下發(fā)給發(fā)起升級請求的升級模塊。進一步的,所述升級服務模塊402還可以進一步包括:描述信息確定模塊425,用于查找所述待升級軟件的最新版本的功能描述信息,將該功能描述信息發(fā)送給升級指令合成發(fā)送模塊424;所述升級指令合成發(fā)送模塊424進一步將該功能描述信息填加到所述升級指令信息中發(fā)送給發(fā)起升級請求的客戶端升級模塊。圖6為客戶端的所述升級模塊的一種組成示意圖。參見圖6所示,在一種具體實施例中,客戶端的所述升級模塊401具體包括:自升級模塊411,用于在上報軟件升級請求之前,首先與服務器交互判斷是否要自升級,如果是則下載新版本的升級模塊文件,并用該新版本的升級模塊文件替換原升級模塊文件;否則再上報軟件升級請求。查詢升級模塊412,用于向服務器上報攜帶本地待升級軟件版本信息的軟件升級請求,接收服務器返回的升級指令信息。文件下載模塊413,用于根據(jù)所述升級指令信息中待更新文件清單信息中的文件下載路徑下載相應的文件。差異文件合并模塊414,用于根據(jù)所述待更新文件清單信息,將下載的 文件更新到本地待升級軟件安裝目錄的所述相對路徑下。執(zhí)行操作模塊415,用于針對所述升級指令信息中的每一條操作指令,從待升級軟件安裝目錄的所述相對路徑中查找到與該操作指令中文件名相同的目標文件,并對該目標文件執(zhí)行所述操作指令。在一種實施例中,所述差異文件合并模塊414需要進一步實施安全保障,即該差異文件合并模塊中可以進一步包括:關(guān)閉提示模塊,用于在更新相應文件之前,判斷待升級軟件是否正在運行,如果是則提示用戶關(guān)閉該軟件,關(guān)閉后再更新相應文件,否則直接更新相應文件。備份操作模塊,用于在更新相應文件之前,備份本地的待更新的原文件,在某一文件更新失敗時,判斷該文件是否必須要更新成功,如果是則用所述備份文件還原所有已經(jīng)更新的文件;否則將該文件的最新下載文件注冊到操作系統(tǒng)的重啟替換服務中,待系統(tǒng)重啟時啟動替換服務來更新該文件。為了進一步節(jié)約帶寬資源和文件下載時間,在另一實施例中,所述待更新文件確定模塊中還可以包括二進制差異文件生成模塊,用于在待更新文件確定模塊查找出最新版本軟件中的更改文件后,根據(jù)該更改文件的文件名在所述升級請求中查到對應的文件HASH值,再根據(jù)該HASH值查詢服務器端存儲的與該HASH值相同的原始文件,將該原始文件與最新版本的同名文件進行二進制對比,生成二進制差異文件,用該二進制差異文件的下載路徑信息代替所述待更新文件清單中的同名文件的下載路徑信息;對應的,所述客戶端的差異文件合并模塊中還可以進一步包括二進制差異合并模塊,用于在下載到的二進制差異文件后,將本地待升級軟件安裝目錄的所述相對路徑下的同名文件與所述二進制差異文件進行合并。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
平罗县| 石河子市| 涟源市| 汨罗市| 西充县| 郁南县| 灵璧县| 堆龙德庆县| 宝清县| 剑河县| 内黄县| 阿克苏市| 汽车| 湘乡市| 田阳县| 巧家县| 托克逊县| 平谷区| 阿荣旗| 同仁县| 通州市| 德钦县| 安仁县| 屯门区| 崇信县| 宜宾市| 康马县| 富阳市| 平舆县| 延安市| 临武县| 得荣县| 娱乐| 嘉定区| 锡林浩特市| 阳泉市| 新泰市| 北海市| 青川县| 化州市| 连州市|