随着网络的极大发展和普及,很多软件都增加了自动更新的功能,首当其冲的就是Windows了,对于网络游戏的客户端更是必不可少。最近要为一个软件实现自动更新的功能,正好有机会去思考一下这个功能实现起来需要做什么。
光从字面上看,自动更新至少包含两个方面:一个是更新,一个就是自动了。那么更新的话,我们可以认为是客户端通过HTTP、FTP或者其他连接从服务器上获得需要的资源。在Windows中,有一组API就是应用在这个方面的,这就是WinINet。WinINet有以下几个特殊之处:
1、HINTERENT:这是在WinINet中使用的Handle,它跟其他的Win32 Handle很类似,其实说到底就是指针了,但是它却不能够跟其他类型的Win32 Handle相互交换使用。而各个函数返回的HINTERNET处于一个树型结构中,其中InternetOpen函数返回的HINTERNET则是这棵树的根结点,也就是调用绝大多数WinINet的API之前,都需要调用InternetOpen函数去进行一些初始化的工作,并且返回一个HINTERNET;
2、缓存机制:从网络上取得的数据,通常都需要缓存到内存或者硬盘当中,以备后续的程序使用。很多WinINet函数都有支持缓存,我们在使用这些API的时候,都需要去设定缓存标志位来说明采取哪种缓存机制;
3、错误处理机制:WinINet的错误处理与其他的Win32函数不尽相同,我们可以通过一个WinINet函数的返回值是否为有效的HINTERNET,就可以得知函数调用是否发生错误了。而GetLastError()可以得到更多的错误信息。
说完了WinINet,回归主题。我们从服务器上获得需要的资源,大致可以遵循这样一个流程:通过InternetOpen函数得到一个HINTERNET handle:handleA;接着基于handleA再利用InterOpenUrl、FtpOpenFile、GopherOpenFile或者HttpOpenRequest函数得到另一个HINTERNET handle:handleB;最后基于handleB利用InternetReadFile函数将所需的文件读到本地的缓冲区,再利用标准的输入流函数将缓冲区的内容写入本地的目标文件。以下是示例代码:
void Update(const char *Url, const char *OutFile)
{
HINTERNET handleA = InternetOpen("Update", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (handleA != NULL)
{
HINTERNET handleB = InternetOpenUrl(handleA, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (handleB != NULL)
{
byte Temp[MAXBLOCKSIZE];
ULONG Number = 1;
FILE *stream;
if( (stream = fopen( OutFile, "wb" )) != NULL )
{
while (Number > 0)
{
InternetReadFile(handleB, Temp, MAXBLOCKSIZE - 1, &Number);
fwrite(Temp, sizeof (char), Number , stream);
}
fclose( stream );
}
InternetCloseHandle(handleB);
handleB = NULL;
}
InternetCloseHandle(handleA);
handleA = NULL;
}
}
分享到:
相关推荐
"WinForm AutoUpdate自动更新源码"提供了一种实现这一功能的解决方案。这个源码经过了全面的验证和测试,并已应用于实际项目,确保了其稳定性和可靠性。 自动更新机制通常包含以下几个关键部分: 1. **检查更新**...
在本案例中,我们将探讨如何使用C#编程语言来实现自动更新功能,这主要涉及到以下几个核心知识点: 1. 文件版本管理: 在实现自动更新前,需要有一套完整的版本管理系统,例如Git,用于跟踪代码的更改。每次更新时...
该工具的主要功能是通过执行Wub.exe这个可执行文件来操作,可能内部实现了与Windows Update服务交互的逻辑,以实现一键关闭自动更新。Wub.ini则可能是一个配置文件,存储了软件的设置或操作参数,使得软件能够根据...
在Windows 10操作系统中,自动更新功能是默认开启的,旨在确保系统始终保持最新的安全补丁和功能更新。然而,有些用户可能因为各种原因需要关闭这个功能,例如避免不必要的网络流量消耗、防止未经许可的系统更改或者...
通过学习和分析这个项目,开发者可以更好地理解和实现自己的APK自动更新功能。 总结,实现Android APK的自动更新需要考虑多个方面,包括权限管理、系统版本适配、后台任务执行等。通过合理的设计和编码,可以为用户...
在Windows操作系统中,尤其是Windows 7和Windows 10,微软设计了自动更新功能,旨在及时为用户推送安全补丁和新功能,以保持系统的安全性和功能性。然而,这一特性对于某些用户而言可能会带来不便,比如自动下载和...
WinForm自动更新程序是Windows桌面应用程序开发中常见的一种功能,它允许软件在用户端自动检测并下载最新的程序版本,确保用户始终运行的是软件的最新稳定版。WinForm是.NET Framework框架下用于构建桌面应用程序的...
在IT行业中,Windows Forms(WinForm)是一种常用的.NET框架下的桌面应用程序开发平台,而自动更新机制则是提升用户体验和软件安全性的关键功能。本教程将详细讲解如何利用WinForm结合IIS(Internet Information ...
在C#编程环境中,开发一个具有自动更新功能的窗体应用程序是一项常见的需求,尤其是在软件发布后需要定期维护和修复bug时。本项目标题为“C#程序自动更新”,描述中提到包含两个程序:主程序和更新程序。接下来,...
在Windows 10操作系统中,微软为了保持系统的稳定性和安全性,设计了自动更新功能,它会定期检查并安装最新的系统补丁和功能更新。然而,对于一些用户来说,自动更新可能会带来不便,例如占用网络带宽、导致电脑重启...
在Windows 10操作系统中,微软为了保持系统的稳定性和安全性,设计了自动更新功能,它会定期检查并安装最新的系统补丁和功能更新。然而,这个功能并不适合所有用户,尤其是那些对系统稳定性有特殊需求或者网络环境...
在Windows 10操作系统中,自动更新功能是为了确保系统安全性和稳定性而设计的,它会定期检查并安装新的系统补丁和功能更新。然而,对于某些用户来说,自动更新可能会带来不便,例如占用网络带宽、导致意外关机或者与...
在IT行业中,程序的自动更新是一项重要的功能,它允许用户无缝地获取软件的最新版本,无需手动下载和安装。易语言是一种中文编程语言,旨在降低编程门槛,让更多人能够进行软件开发。本教程将深入探讨如何使用易语言...
首先,我们可以通过控制面板来尝试关闭自动更新。步骤如下: 1. 打开“控制面板”:在搜索栏输入“控制面板”,点击搜索结果打开。 2. 进入“系统和安全”:在控制面板中找到并点击“系统和安全”选项。 3. 选择...
综上所述,`Winform版本升级自动更新`是一个涉及网络通信、文件操作、进程管理等多个领域的复杂功能。正确实现这一功能可以极大地提升用户体验,同时降低技术支持的压力。在实际开发中,开发者需要综合运用多种编程...
本模块聚焦于“在线更新”功能的实现,通过一行代码即可轻松实现软件的自动更新,极大地方便了开发者和用户。 在软件开发中,保持软件的新鲜度和安全性至关重要,而在线更新机制是解决这一问题的有效途径。这个...
在实现自动保存功能的过程中,开发者还应注意一些细节,如在保存过程中暂时禁用发表或保存草稿按钮,避免用户在保存尚未完成时尝试进行其他操作。同时,通过改变按钮的显示文字或颜色(如变为红色并显示“正在自动...
在日常使用WPS Office软件时,自动更新功能虽然有助于保持软件的最新状态,但有时可能会打扰到用户的工作流程,特别是当用户对当前版本满意或担心新版本可能存在不稳定因素时。针对这个问题,我们可以采取一些措施来...
在Windows 10操作系统中,自动更新功能是默认开启的,旨在确保用户能及时获得最新的安全补丁和功能改进。然而,对于某些用户而言,自动更新可能会带来不便,例如在工作过程中突然重启、网络资源占用过大或者对新版本...
综上所述,实现Android应用的保存密码和自动登录功能需要结合多种技术,包括数据存储、加密、权限管理和用户交互设计。开发者需要在保证安全性和用户体验之间找到平衡,确保应用功能的同时,也要注重用户数据的保护...