65.9K
CodeProject 正在变化。 阅读更多。
Home

CWebUpdate 1.0 - 一个 MFC 更新类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (17投票s)

2005年6月25日

3分钟阅读

viewsIcon

71102

downloadIcon

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日:首次发布。(我预感即将发布另一个版本。)
© . All rights reserved.