CWebUpdate 1.0 - 一个 MFC 更新类






4.94/5 (17投票s)
2005年6月25日
3分钟阅读

71102

3375
一种占用空间小的简易更新方法。
引言
在创建应用程序时,我需要实现某种更新系统。它需要是模块化的,以便我可以添加和修改现有部分。我还想按照我想要的方式来塑造它。 CWebUpdate
就是结果。
它是如何工作的?
好的,CWebUpdate
的核心围绕着某种更新文件,其格式为
[filename] [sha-1 hash]
[filename] [sha-1 hash]
看起来有点像这样
readme.txt 59c23b37d5f063e2a01938d3d06583dc2ea0a933
您可以使用 CHash 的演示项目 为文件生成 SHA-1 哈希值。
因此,当告诉 CWebUpdate
检查更新时,它会下载此文件。然后,它会扫描一个目录,查找此列表中包含的文件。它维护一个内部数组,其中包含缺失文件和已更新文件(每个文件都使用 SHA-1 进行哈希处理并进行比较)。
通过这种方式,您可以轻松确定是否添加和更新了文件,然后更新它们。
幕后发生了什么?
CWebUpdate
使用 URLDownloadToFile
在一个线程中下载文件。这允许在下载发生时对话框保持未冻结状态。
SHA-1 用于检查文件的完整性,确保它们与更新中的文件相同/不同。用于此的代码取自 CHash。
使用 CWebUpdate
CWebUpdate
易于实现(或者我认为是这样)。设置更新系统的逐步指南
- 在您的项目中的某个地方包含 CWebUpdate.h。
- 声明一个
CWebUpdate
对象。 - 设置远程 URL 和更新 URL。
- 设置要下载到的本地目录(如果需要,
CWebUpdate
可以自动找到此目录)。 - 搜索更新。
- 检查是否找到任何更新,将其呈现给用户(如果您愿意),并在必要时更新它们。
好的,现在,一个代码示例
CWebUpdate updObj; // Have CWebUpdate get this exe's path updObj.SetLocalDirectory("", true); // Set the URL for the update file and where downloads are stored updObj.SetUpdateFileURL("http://yourwebsite.com/program/update.txt"); updObj.SetRemoteURL("http://yourwebsite.com/program"); // Check for updates updObj.DoUpdateCheck(); // If a new file called "important.exe" was found, download it for (int i = 0; i < updObj.GetNumberMissing(); i++) { if (updObj.GetMissingAt(i) == "important.exe"); updObj.DownloadMissing(i); }
CWebUpdate 参考
设置类
CString GetLocalDirectory()
返回将下载到的当前目录文件。
CString GetRemoteURL()
返回当前将下载文件的 URL。
CString GetUpdateFileURL()
返回当前更新文件 URL。
void SetLocalDirectory(LPCSTR pathTo, bool generate)
设置将下载文件的目录。如果 generate 为
true
,则路径将是 exe 运行的目录。void SetRemoteURL(LPCSTR url)
设置将下载文件的 URL。
void SetUpdateFileURL(LPCSTR url)
设置当前更新文件 URL。
检查更新
bool DoUpdateCheck()
如果找到并解析了更新文件,则返回
true
,否则返回false
。int GetNumberDifferent()
返回找到的不同文件的数量。
int GetNumberMissing()
返回找到的缺失/新文件的数量。
int GetNumberSuccessful()
返回找到的最新文件的数量。
CString GetDifferentAt(int i)
返回不同文件的文件名。
CString GetMissingAt(int i)
返回缺失/新文件的文件名。
CString GetSuccessfulAt(int i)
返回最新文件的文件名。
下载更新
bool DownloadMissing(int i)
如果下载了位于“i”位置的缺失文件,则返回
true
。bool DownloadDifferent(int i)
如果下载了位于“i”位置的不同/已更新的文件,则返回
true
。
演示项目包含实现 CWebUpdate
的完整示例。
更新
- 2005年6月25日:首次发布。(我预感即将发布另一个版本。)