实现程序的自动更新

  • 格式:pdf
  • 大小:154.34 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于visual c++之windows核心编程代码分析(8)自动下载更新程序

分类:VC++编程技术Visual C++2010编程技术Visual Studio2012Windows82011-12-1622:46149

人阅读评论(0)收藏举报我们编写Windows程序,经常需要自动更新,该功能如何实现呢,我们来看代码实现与注释讲解

view plaincopy to clipboardprint?

1.#include"stdafx.h"

2.#include"AutoUpdate.h"

3.

4.#ifdef_DEBUG

5.#define new DEBUG_NEW

6.#endif

7.

8.//唯一的应用程序对象

9.

10.CWinApp theApp;

11.

ing namespace std;

13.

14.#define MYVERSION5//定义程序版本。请注意:每次发

布,值应该不相同,建议使用自然数递增数列!

15.

16.DWORD WINAPI UpdateThreadProc(LPVOID lParam)

17.{

18./*

19.*如果有必要,可以使用GetTempPath()函数获取系统临时文件目录,将用到的文

件下载至该目录。本实例中直接使用程序当前目录,

20.*并在升级完成时将其删除。

21.*/

22.wchar_t*TempFileName=new wchar_t[255];//升级文件临时文件名,在

该程序中为“AutoUpdate_.exe”

23.wmemset(TempFileName,0,255);

24.wsprintf(TempFileName,L"%s_.exe",AfxGetApp()->m_pszAppName);//wsp

rintf对字符串进行格式化处理

25.

26.URLDownloadToFile(NULL,_T("http://127.0.0.1/update.txt")/*升级信息

配置文件,请根据实际自行修改*/,_T("Update.ini"),0,NULL);

27.

28.FILE*pFile=_wfopen(L"update.ini",L"r");

29.if(!pFile)

30.return-1;//如果打开文件失败,则返回。

31.

32.char UpdateInfo[10];//变量存储“update.ini”中的信息

33.memset(UpdateInfo,0,10);

34.fgets(UpdateInfo,10,pFile);//从下载回来的升级配置文件中读取版本号

35.fclose(pFile);

36.

37.int UpdateVersion=atoi(UpdateInfo);//atoi函数返回

(const char*_Str)参数转化为int的值。

38.

39.if(UpdateVersion>MYVERSION)//判断现有版本是否大于程序自身版本

40.{

41.//MessageBox(NULL,_T("发现新版"),_T("在线更新

"),MB_ICONINFORMATION);

42.URLDownloadToFile(NULL,_T("http://127.0.0.1/AutoUpdate.exe")/*

升级文件链接,请根据实际自行修改*/,TempFileName,0,NULL);

43.

44.PROCESS_INFORMATION PI;

45.STARTUPINFO SI;

46.memset(&SI,0,sizeof(SI));

47.SI.cb=sizeof(SI);

48.if(CreateProcess(TempFileName,L"/install",NULL,NULL,FALSE,N

ORMAL_PRIORITY_CLASS,NULL,NULL,&SI,&PI))

49.//启动升级程序后退出

50.ExitProcess(0);

51.}

52.DeleteFile(_T("update.ini"));

53.return0;

54.}

55.DWORD WINAPI WorkThreadProc(LPVOID lParam)

56.{

57.MessageBox(NULL,L"工作线程已经启动。",L"信息",MB_ICONINFORMATION);

58.Sleep(INFINITE);

59.return0;

60.}

61.int_tmain(int argc,TCHAR*argv[],TCHAR*envp[])

62.{

63.int nRetCode=0;

64.

65.//初始化MFC并在失败时显示错误

66.if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),

0))

67.{

68.//TODO:更改错误代码以符合您的需要

69._tprintf(_T("错误:MFC初始化失败\n"));

70.nRetCode=1;

71.}

72.else

73.{

74.//TODO:在此处为应用程序的行为编写代码。

75.

76.wchar_t StartInfo[255];//启动参数

77.wmemset(StartInfo,0,255);

78.wcscat(StartInfo,AfxGetApp()->m_lpCmdLine);

79.

80.if(!wcsicmp(StartInfo,_T("/install")))

81.{

82.//AfxMessageBox(L"命令请求安装");

83.wchar_t*AppName=new wchar_t[255];

84.wchar_t*TempFileName=new wchar_t[255];//升级文件临

时文件名,在这里为“AutoUpdate_.exe”