这可能不是问题的完整答案,但如果您要自己实施,可能需要考虑以下几点:
对于“检查更新”部分,无需实际下载,您可以从在线位置下载包含最新版本字符串(例如 1.24)的文本文件。这段代码 sn-p 应该为 Windows 版本完成工作(虽然我没有测试过):
#include <wininet.h>
_Bool CheckForUpdate() {
DWORD flags = 0; // Not really used. DWORD == unsigned long
if (!InternetGetConnectedState(&flags, 0)) {
// The user is not connected to the Internet. Finished?
}
// Open the connection (HINTERNET == void *):
HINTERNET connection = InternetOpen("User Agent", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (http == NULL) {
// Error.
...
}
HINTERNET updateFile = InternetOpenUrl(connection, "URL", NULL, FLAGS, 0);
if (updateFile == NULL) {
// Something went wrong.
...
InternetcloseHandle(connection); // Close the handle.
...
}
// Reached here, we have the connection up, reading the file:
char latestVersion[10] = {0};
DWORD bytesRead = 0;
if (InternetReadFile(updateFile, latestVersion, sizeof(latestVersion), &bytesRead) == FALSE) {
// Error.
...
InternetCloseHandle(updateFile);
InternetCloseHandle(connection);
...
}
// Internet stuff is finished, so the handles can be closed now:
InternetCloseHandle(updateFile);
InternetCloseHandle(connection);
// Check if there's a new version available:
if (strcmp(latestVersion, CURRENT_VERSION) > 0) {
// An update is available.
return 1;
} else {
// No new updates available.
return 0;
}
}
有我在答案末尾使用的 Wininet 函数的文档的链接,您可以在其中查看每个参数的用途。
当调用InternetOpen() 时,用户代理字符串可能是例如您的应用程序名称。我写了INTERNET_OPEN_TYPE_DIRECT,因为它是最常见的设置,没有指定代理配置。
在InternetOpenUrl() 调用中,第二个参数应该是作为NULL 终止字符串的文本文件的URL。对于该调用中的FLAGS 参数,请检查您拥有的不同文档的在线文档(查看帖子底部的链接)。例如,可能的标志组合如下:
INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI
strcmp() 调用也应该适用于版本之间的字母,因此按照上面的示例,“1.24c”应该是比“1.24”或“1.24a”更新的版本。
如果您有多个发布路径(例如 beta 版本),您可以在文本文件中使用多个字段或拥有多个文件。如果您不想将不稳定的版本推送给所有用户,而只推送给愿意使用此类构建的用户,这可能会很有用。
如果读取文件时没有错误,您还可以使用带有HTTP_QUERY_STATUS_CODE 标志的HttpQueryInfo() 函数添加检查以查看HTTP 状态代码是否为200(正常)。
无论如何,这一切只是为了获得新版本的确认,您可以通过消息通知您的用户或使用类似的方案来下载新的安装应用程序。对于身份验证阶段,您可以将设置文件的校验和添加到版本文件中,并在文件下载后计算它。
Wininet API 在线文档的链接:
希望对您有所帮助。