实现程序的自动更新
- 格式:pdf
- 大小:154.34 KB
- 文档页数:5
基于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”