前段時(shí)間做了一個(gè)工具發(fā)布給公司的各部門(mén)使用后反饋了不少BUG,每次修改后均需要發(fā)郵件通知各用戶(hù)替換最新版本,很不方便,因此后來(lái)就寫(xiě)了一個(gè)自動(dòng)升級(jí)的功能,這樣每次發(fā)布新的版本時(shí)只需要將其部署到自動(dòng)升級(jí)服務(wù)器上,工具使用用戶(hù)運(yùn)行工具時(shí)就會(huì)連接到自動(dòng)升級(jí)服務(wù)器,檢查是否有版本更新,如果有則完成更新后再運(yùn)行最新版本,否則就運(yùn)行當(dāng)前工具版本。
為了使這個(gè)自動(dòng)升級(jí)模塊具有通用性,我將其做成可以單獨(dú)運(yùn)行的程序,而并非集成到工具中,這樣則可以為各類(lèi)軟件提供自動(dòng)升級(jí)的功能。自動(dòng)升級(jí)模塊采用SOCKET方式實(shí)現(xiàn)升級(jí)客戶(hù)端與服務(wù)端的交互,通過(guò)版本控制文件autoupdate.xml來(lái)控制版本的更新,完成自動(dòng)更新后會(huì)將歷史清單history.htm也發(fā)送給客戶(hù)端,并自動(dòng)打開(kāi)該文件,使用戶(hù)可以對(duì)本次升級(jí)的具體內(nèi)容一目了然。
詳細(xì)實(shí)現(xiàn):
autoupdate.xml具體內(nèi)容:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

history.htm具體內(nèi)容:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


28

29

30

31

32

33

34


35


36

37

38

39

40

41

42


43

44

45

46

47

48

49

50


51


52

53

54

55

56

57

58

工作原理:
自動(dòng)升級(jí)客戶(hù)端首先會(huì)將本地的autoupdate.xml內(nèi)容發(fā)送給服務(wù)端,服務(wù)端收到客戶(hù)端的版本信息后與服務(wù)端本地的版本信息(autoupdate.xml)進(jìn)行比較,首先比較Version,如果一致則通知客戶(hù)端無(wú)需更新,如果不一致則檢查Files中各文件的SubVer,服務(wù)端將SubVer不一致的文件發(fā)送給客戶(hù)端,對(duì)于服務(wù)端有而客戶(hù)端沒(méi)有的文件也需要發(fā)送給客戶(hù)端,處理完所有File后,服務(wù)端將本地的history.htm與傳送給客戶(hù)端,并通知客戶(hù)端更新完畢;客戶(hù)端收到更新完畢后的應(yīng)答后自動(dòng)打開(kāi)history.htm,將更新歷史信息顯示給用戶(hù)查看。