用VC++如何实现程序版本在线升级更新
- 格式:rtf
- 大小:8.38 KB
- 文档页数:2
用PB实现C/S应用程序的自动升级黄石纺织机械厂信息中心黄新民 2007.9.5C/S模式的应用程序安装在客户端,一旦程序改动升级,更换应用程序的工作量大。
但由于它与B/S模式相比具有交互能力强、运行速度快的优点,目前在企业管理内部的ERP等应用中还是得到比较广泛的应用。
企业的信息化是一个长期的、不断进步的过程,所以应用程序的修改和升级也是经常发生的。
目前企业的信息化应用都达到一定的规模,客户端的数量至少也在几十台以上。
一旦对应用程序进行修改,及时地更换客户端应用程序的工作量是很大的。
怎样在C/S模式下实现应用程序的自动升级呢?下面介绍一种PB开发的应用程序实现自动升级的方法。
自动升级的核心是在应用程序的启动程序段加入判别版本信息的代码,版本有效就直接进入应用系统,否则进行升级。
实现这种自动升级的过程比较简单:1.将当前应用程序变为过时的旧版在数据库中建立一个版本信息表bbxx,表的结构包含系统名(xtname)和版本号(bbh)两个字段,例如序记录的版本号信息进行比较,若相同则正式运行应用程序;不同则进行版本的自动更新。
采用这种方法的优点是能及时地停止所有客户端旧版应用程序的运行,从而保证不会出现由于旧版更换不及时而造成的数据混乱。
2.确定当前应用程序所在的位置应用程序在客户端安装的位置可能各不相同,确定其在客户端的安装位置才能保证新程序的正确替换。
3.自动建立网络资源,连接网络内新版应用程序所在的目录,拷贝新文件在网络内确定一台计算机,并设定一个放置新版pbd文件的共享文件夹。
在应用程序应用的Open事件中编写代码,建立网络资源,连接到共享文件夹,复制新文件。
4.断开网络资源5.重新登陆进入新版应用程序在PB中实现上述过程的详细步骤:1.声明外部函数FUNCTION Long WNetAddConnection2 ( REF NETRESOURCE lpNetResource, String lpPassword, String lpUserName, Long dwFlags) LIBRARY "mpr.dll" ALIAS FOR "WNetAddConnection2A" FUNCTION Long WNetCancelConnection2 (String lpName, Long dwFlags,Long fForce) LIBRARY "mpr.dll" ALIAS FOR "WNetCancelConnection2A"2. 建立结构3.// 建立与数据库的连接-------------……connect USING SQLCA;if sqlca.sqlcode <> 0 thenmessagebox('提示', '不能连接数据库!')haltend if// ----------------------------------------string bbh1select bbh into :bbh1 from hsfj.bbxx where xtname = '采购管理'; //得到当前有效的版本号if bbh1='2007.9.2A' then // 每次修改结束编译新的可执行文件前,将数据库的版本信息表的版本号字段改为新值,同时修改此处引号内的值与其一致。
C#Winform⾃动更新程序实例详解本⽂实例为⼤家分享了C# Winform ⾃动更新程序,供⼤家参考,具体内容如下第⼀步:检查更新检查更新其实⽆⾮就是去⽐较更新包的版本和本地软件版本,如果⾼则更新、低则不更新。
怎么获取版本号⽅法很多,本案例是获取软件的配置⽂件。
private bool CheckUpdate(){bool result = false;try{string Cfg = TxtRead(exePath "\\Config.txt");ConfigLocal = JsonConvert.DeserializeObject<DTO_Config>(Cfg);CheckUpdateURL = ConfigLocal.AutoUpdateURL;Cfg = TxtRead(CheckUpdateURL "\\Config.txt");ConfigRemote = JsonConvert.DeserializeObject<DTO_Config>(Cfg);VersionR = ConfigRemote.Version;VersionL = ConfigLocal.Version;int VersionRemote = int.Parse(ConfigRemote.Version.Replace(".", ""));int VersionLocal = int.Parse(ConfigLocal.Version.Replace(".", ""));result = VersionRemote > VersionLocal;}catch { }return result;}第⼆步:下载更新包因为C/S的软件更新是⾯对所有⽤户,S端除了给C端提供基本的服务外,还可以给C端提供更新包。
嵌入式系统的版本控制与固件升级方法嵌入式系统是一种专门设计用于控制特定设备或系统的计算机系统。
它们通常在嵌入式设备中运行,如智能手机、汽车、家用电器等。
随着嵌入式系统的普及和功能的不断增加,版本控制和固件升级成为了关键的任务。
本文将详细介绍嵌入式系统的版本控制和固件升级的方法。
版本控制是指在软件开发过程中对软件版本进行管理和控制的过程。
对于嵌入式系统来说,版本控制非常重要,因为它可以确保固件的稳定性和可靠性,并帮助开发团队更好地管理软件的变化和进展。
下面将介绍几种常见的版本控制方法。
1. 本地版本控制系统(Local Version Control System,简称LVCS):这种方法是最基本的版本控制方法之一,它通过在开发机器的本地硬盘上保存不同版本的文件来管理软件的变化。
开发者可以通过备份和恢复文件来跟踪和管理软件的版本。
尽管这种方法简单易行,但是它在多人协同开发和团队合作方面存在一些限制。
2. 集中化版本控制系统(Centralized Version Control System,简称CVCS):CVCS是相对于LVCS而言的一种升级版本控制方法。
它通过将所有的版本文件存储在中央服务器上,开发者可以从服务器上拉取最新的版本。
这种方法非常适合多人协同开发,因为它可以确保团队成员共享相同的代码库。
然而,CVCS也存在一些问题,例如服务器故障可能导致数据丢失,对于远程工作的开发人员来说,依赖于中央服务器也会造成不便。
3. 分布式版本控制系统(Distributed Version Control System,简称DVCS):DVCS是一种更先进的版本控制方法,它将代码库完整地分布到每个开发者的本地机器上。
开发者可以在本地进行版本控制工作,而不需要依赖于中央服务器。
这种方法允许开发者在没有网络连接的情况下继续工作,并且可以轻松地将更改同步到其他开发者的机器上。
DVCS还提供了更好的分支管理和合并功能,使得多人协同开发更加灵活和高效。
在线升级方案引言在软件开发过程中,随着产品版本的不断迭代,我们需要有效地实施软件升级。
传统的软件升级方式往往需要用户手动下载和安装升级包,不仅繁琐,还容易出错。
而在线升级方案能够有效解决这些问题,提供方便快捷的升级方式,极大地提升了用户体验。
本文将介绍一种在线升级方案,详细阐述其原理和实施步骤。
在线升级方案的原理在线升级方案基于客户端-服务器架构,主要由以下几个组件组成:1. 服务器端服务器端是整个在线升级系统的核心,负责存储和管理软件的升级包。
服务器端主要包含以下功能:•版本管理:服务器端记录当前软件的版本号和最新的可用版本号。
•升级包存储:服务器端存储软件的升级包,并提供相关的接口供客户端下载和安装。
•升级策略管理:服务器端管理不同版本软件的升级策略,包括强制升级、可选升级等。
2. 客户端客户端是用户使用的软件,它需要能够自动检测和下载升级包,并完成升级过程。
客户端主要包含以下功能:•版本检测:客户端定期向服务器端发送请求,检测是否存在新的软件版本。
•升级包下载:如果有新的版本可用,客户端从服务器端下载相应的升级包。
•升级包安装:客户端将下载的升级包进行解压并安装,完成软件的升级。
•升级策略应用:客户端根据服务器端返回的升级策略,判断是否需要强制升级或者是可选升级。
实施步骤以下是实施在线升级方案的详细步骤:1.设计并实现服务器端:首先,需要设计并实现服务器端,包括版本管理、升级包存储和升级策略管理等功能。
服务器端可以采用常见的Web框架进行开发,如Django、Flask等。
2.部署服务器端:将服务器端部署到云服务器或者自建的服务器上,并确保服务器能够正常运行。
3.设计并实现客户端:接下来,需要设计并实现客户端,包括版本检测、升级包下载和升级包安装等功能。
客户端可以根据具体平台选择合适的开发框架进行开发,如Electron、Flutter等。
4.客户端与服务器端的通信:客户端需要能够与服务器端进行通信,发送版本检测请求并接收服务器端返回的升级信息。
PB实现自动升级程序一、升级程序设计思路1.检测最新版本:升级程序需要从服务器端获取最新的版本信息,然后与本地已安装版本进行比较,判断是否需要升级。
3.备份文件:在进行升级之前,应备份所需升级的文件,以防意外发生时能够回滚到之前的版本。
5.提示升级完成:升级完成后,向用户显示升级完成的提示信息。
二、PB实现自动升级程序的步骤1.创建主窗口:在PB中创建一个主窗口,用于显示升级进度和完成提示信息。
2.创建数据库:使用PB内置的数据库工具,创建一个用于存储版本信息的数据库,包括版本号、更新链接等相关信息。
3.编写检测更新代码:创建一个检测更新的函数,该函数从服务器获取最新版本信息并与本地版本比较,判断是否需要升级。
可以使用PB内置的HTTP请求功能来获取服务器端的版本信息。
5.编写备份文件代码:在执行升级之前,编写备份文件的函数,将需要升级的文件备份到指定的目录,以便回滚。
7.编写完成提示代码:在升级完成后,编写完成提示的函数,通过消息框或对话框等方式向用户显示升级完成的提示信息。
8.编写自动升级流程代码:将上述函数按照实际需求进行组织和调用,实现自动升级的完整流程。
三、注意事项2.备份重要文件:在执行升级前应备份重要的文件,以防错误或异常情况导致升级失败时能够回滚到之前的版本。
3.用户提示信息:在升级过程中和升级完成后,应向用户显示相应的提示信息,以便用户了解升级进度和结果。
4.异常处理:在升级过程中,应加入异常处理机制,以捕获并处理可能出现的错误或异常情况,保证升级程序的稳定性和可靠性。
四、总结使用PB实现自动升级程序可以让用户更加方便地获取最新的软件或系统版本,提升用户体验。
通过上述步骤和详细说明,可以在PB中编写一个自动升级程序,实现软件或系统的自动升级功能。
在具体实施过程中,需要根据实际需求进行适当的调整和修改。
C#开发的Windows Form 应用程序的升级说明★1.在服务器段创建一个可共享的文件夹,或者在服务器的IIS(Internet信息服务)中建立一个可供下载更新文件的目录。
如服务端中的 E:\UpGrade\★2.在服务器端(如E:\UpGrade\)中创建一个xml文件update.xml,该update.xml的内容如下:<?xml version="1.0" encoding="gb2312" ?><AutoUpdater><Url>\\192.168.6.223\UpGrade\</Url><Application><AppName>HrManager.exe</AppName><AppVersion>1.2.0.0</AppVersion></Application><Files><File Name="hrBll.dll" Vers="1.0.0.0"></File><File Name="hrBll.pdb" Vers="1.0.0.0"></File><File Name="HrManager.exe" Vers="1.0.0.0"></File><File Name="HrManager.pdb" Vers="1.0.0.0"></File><File Name="HrManager.vshost.exe" Vers="1.0.0.0"></File><File Name="HrManager.vshost.exe.manifest" Vers="1.0.0.0"></File><File Name="hrModel.dll" Vers="1.0.0.0"></File><File Name="hrModel.pdb" Vers="1.0.0.0"></File><File Name="MenuMT.xml" Vers="1.0.0.0"></File><File Name="MTMenu.xml" Vers="1.0.0.0"></File></Files></AutoUpdater>其中:AppName节点存放应用程序名AppVersion节点存在最新程序的版本号(服务器版本号)Files节点中的File指的是需要更新的文件名★3.服务器端E:\UpGrade\的内容(如下图):update.xml中主要设置应用程序名、最新程序的版本号、所有需要更新的文件名。
一种软件系统自动升级方法
软件系统自动升级可以通过以下方法实现:
1. 自动检测更新:软件系统可以定期检查最新版本的升级,并提醒用户进行更新。
这可以通过在软件启动时进行检查,或者在后台运行时进行检查来实现。
2. 下载和安装更新:一旦发现有新版本可用,软件系统可以自动下载更新并安装,或者提示用户进行下载和安装。
3. 后台更新:软件系统可以在后台运行时进行更新,不干扰用户的正常操作。
4. 自动回滚:如果更新失败或导致系统不稳定,软件系统可以自动回滚到之前的版本,确保用户的系统不被损坏。
5. 用户设置选项:用户可以选择自动更新的时间、频率和是否应用更新等选项,以满足用户的不同需求。
通过以上方法,软件系统可以实现自动升级,为用户提供更好的使用体验,同时也能及时修复系统中的漏洞和bug。
⽤C#实现在线升级//这是⼀个webserviceprivate AppUpdate.UpdateServ UpdateSvr;private void button1_Click(object sender, System.EventArgs e){if(LinkWebServices()==true){bel1.Text="连接服务器....... PASS";if(CheckVer()==true){bel2.Text="检查最新版本并下载.......PASS";}else{bel2.Text="检查最新版本并下载.......FAIL";}}else{bel1.Text="连接服务器.......FAIL";}}//这是⽤来与升级服务器建⽴连接private bool LinkWebServices(){try{UpdateSvr=new UpdateServ();return true;}catch{return false;}}//调⽤webservice⽤来检查是不是有最新的版本private bool CheckVer(){string path =Application.StartupPath;try{VersionCheck(path);return true;}catch(Exception ex){MessageBox.Show(ex.ToString());return false;}}private void VersionCheck(string desPath){try{#region 查看⽂件和⽬录if(!desPath.EndsWith(@"\"))desPath += @"\";if(!System.IO.Directory.Exists(desPath)){System.IO.Directory.CreateDirectory(desPath);}string tempPath = desPath + @"tempDesPathCache\";if(System.IO.Directory.Exists(tempPath)){System.IO.Directory.Delete(tempPath,true);System.IO.Directory.CreateDirectory(tempPath);}elseSystem.IO.Directory.CreateDirectory(tempPath);if(!System.IO.File.Exists(desPath + "UpdateConfig.xml")){System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();updateConfig.LoadXml(@"<root></root>");updateConfig.Save(desPath + "UpdateConfig.xml");}#endregionSystem.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();localXmlDoc.Load(desPath + "UpdateConfig.xml");bool newVersionExist = false;bool moduleExist = false;System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];foreach(System.Xml.XmlNode serverNode in serverNode0){moduleExist = false;foreach(System.Xml.XmlNode localNode in localNode0){//找到对应模块if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText){moduleExist = true;//版本号判断if(localNode.ChildNodes[1]pareTo(serverNode.ChildNodes[1].InnerText) < 0){newVersionExist = true;if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet"){DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText); }else{DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText); }}break;}}//没找到对应模块if(false == moduleExist){if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet"){DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText); }else{DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText); }}}//写⼊新UpdateConfig.xml升级完毕后替换if(newVersionExist){serverXmlDoc.Save(tempPath + "UpdateConfig.xml");if(DialogResult.Yes == MessageBox.Show("有新版本,是否更新?","提⽰",MessageBoxButtons.YesNo)) {string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");string fileName;foreach (string dir in dirs){fileName = ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);if(System.IO.File.Exists(desPath + fileName)){//TODO:可以⽀持备份以前版本System.IO.File.Delete(desPath + fileName);}//TODO:如果系统正在运⾏,您得停⽌系统,⾄于如何停⽌,也许可以使⽤System.Diagnostics.Process System.IO.File.Move(dir,desPath + fileName);}MessageBox.Show("升级完毕");}else{//TODO:可以⽀持重新提⽰升级}}}catch(Exception ex){throw new Exception("升级失败,原因是:" + ex.Message,ex);}}//下载最新的⽂件private void DownloadFile(string source,string fileName){try{.WebClient myWebClient = new .WebClient();myWebClient.DownloadFile(source,fileName);}catch(Exception ex){throw new Exception("下载失败,原因是:" + ex.Message,ex);}}。
软件版本升级方案1. 引言在软件开发过程中,随着时间的推移和业务需求的变化,软件版本升级是不可避免的。
版本升级可以修复漏洞、增加新功能、提升性能等,从而为用户提供更好的体验和服务。
本文将介绍一种软件版本升级方案,以保证版本升级的安全性和稳定性。
2. 版本管理在进行软件版本升级之前,需要进行版本管理。
版本管理可以帮助团队了解和控制软件的演变过程,方便回溯和跟踪问题。
以下是一些建议的版本管理实践:•使用版本控制系统(VCS)进行代码管理,例如Git或SVN。
通过版本控制,团队成员可以并行开发,随时回溯历史版本,协作开发。
•使用语义化版本号,例如MAJOR.MINOR.PATCH格式。
其中,MAJOR表示不兼容的API变化,MINOR表示向下兼容的新功能,PATCH表示向下兼容的错误修复。
•编写良好的提交信息,包含有意义的变更描述和关联的问题编号。
这样可以方便团队成员查找和理解变更内容。
3. 升级策略软件版本升级的策略取决于具体的业务和应用场景。
以下是几种常见的升级策略:•全量升级:用户需要下载完整的软件包,进行安装。
适用于较小的升级,或者必须替换全部文件的情况。
•增量升级:用户只需要下载升级包,然后与当前版本合并。
适用于较大的升级,或者只有部分文件需要更新的情况。
•静默升级:软件在后台自动下载和安装升级包,用户无需干预。
适用于对用户友好的场景,可以避免中断用户使用。
•灰度升级:先在一部分用户中进行升级,验证升级的稳定性和兼容性,再逐步将升级范围扩大。
适用于大规模的升级,减少升级带来的风险。
在选择升级策略时,需要根据实际情况权衡利弊,并进行充分的测试和评估。
4. 升级流程一个完整的软件版本升级流程包括以下步骤:1.需求分析:根据用户反馈和市场需求,明确升级的目标和功能。
2.设计和开发:根据需求,设计和实现相应的功能和改进。
遵循代码管理和提交规范进行开发。
3.测试和验收:使用自动化测试和人工测试手段,对升级进行全面的测试,确保新版本的质量和稳定性。
成都大学专科毕业论文(设计)在线升级服务的设计与实现毕业论文目录第1章在线升级模块的概述 (1)1.1开发工具 (1)1.1.1 Microsoft® Visu al Studio 2008(C#) (1)1.1.2软件架构体系:C/S概述以及C/S和B/S结构分析比较 (1)第2章系统可行性分析 (1)2.1需求分析 (2)2.1.1 功能需求 (2)2.2可行性分析 (2)2.2.1 技术可行性 (2)2.2.3 管理可行性 (2)2.2.4 开发环境可行性 (2)第3章在线升级模块总体设计说明 (3)3.1升级模块设计环境 (3)3.2总体结构设计思路 (3)3.2.1 体系结构设计 (3)3.2.2 系统流程分析 (3)3.3系统模块核心技术 (4)3.3.1 登陆FTP 服务器 (4)3.3.2 向FTP服务器发送命 (5)3.3.3 调用系统API (7)3.3.4 XML的文件操作 (8)3.3.5 INI文件的读写 (10)3.3.6 动态生成版本版面 (11)3.3.6 使用哈希表记录版本号及更新信息 (12)3.4界面设计 (13)3.4.1 服务器端界面设计 (13)3.4.2 客户端界面设计 (14)第4章模块详细设计说明 (16)4.1.类库的设计过程 (16)4.1.1类库的设计过程 (16)4.2服务器端设计过程 (28)4.2.1连接FTP服务器 (28)4.2.2 向FTP服务器上新传新版本 (30)4.2.3获取本地磁盘 (34)4.3客户端设计过程 (35)4.3.1 启动客户端时检测是否有新版本 (35)I4.3.2从FTP服务器下载指定版本 (35)4.3.3定时升级设置的设计 (37)4.3.4计时器实现 (38)第5章系统的测试 (39)总结 (40)致谢 (41)参考文献 (42)第1章在线升级模块的概述1.1 开发工具1.1.1 Microsoft® Visual Studio 2008(C#)Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio2008一次及时、全面的升级。
现在很多共享软件都有"在线升级"功能,比如"Windows 优化大师","超级兔子",所谓在线升级就是一个版本检测程序,通过他,用户可以随时检查有没有新版本程序,以便及时升级,下面我们就在自己的程序里来实现这个功能:
在正式编程前,我要说的是:我不赞成某些共享软件在每次启动时候都检测新版本,并弹出窗口提醒用户,有时候这大大影响或者妨碍了用户的操作和使用,我们要实现的功能是:让用户自己去检查新版本!
编程思路是这样的:首先我们在主页某个地址放一个文件,然后在我们的程序里来检查它,以便获得新版本信息!这里版本信息文件我们用INI文件来操作!比如下列格式,
[Version]
Version=12
[URL]
URL=/123.exe
其中的 Version是新版本号,12表示V1.2版,这个格式完全可以自己设置,URL是新版本程序下载地址
另外,要获取INTETNET上的文件,我们一般有2种办法,一是通过FTP下载,二是HTTP直接连接,如果你有国际域名空间,那么就可以使用匿名FTP在程序里获取版本信息文件,但是对于使用免费主页的朋友来说就麻烦了。
因为服务器不是我们的,这就不太方便了。
那么采用HTTP方式获取版本信息文件就很有必要了!要获取网站上的某个文件并保存在本地,我们只需要一个API函数URLDownloadToFile()即可,当成功下载INI文件后我们就可以读取这个文件并进行分析工作了!
具体实现过程:
打开VC,建立MFC程序,放置一个标签IDC_VER ,用来输出信息,另外安排2个按狃,分别是
IDC_CHECK,IDC_DOWNLOAD
前者用来检查是否有新版本,后者用来下载新版本程序!
首先我们添加一个成员变量char new_url[100] 来存放新版本程序的下载地址:
然后在IDC_CHECK 按钮事件里输入以下代码来检查有无新版本:
SetDLgItemText(IDC_VER,"正在检查,请等待。
");
int ret=URLDownloadToFile(NULL,"http://ip/vesion.ini","c:\\version.ini",0,NULL);
if (ret==S_OK) //如果下载成功
{
// 读取Version 段的数据,得到新版本好
int newversion=GetPrivateProfileInt("Version","Ver",10,"c:\\version.ini");
if (newversion>10) //跟当前版本比较,10表示目前版本V1.0 ,根据具体版本自己设置
{
SetDLgItemText(IDC_VER,"有新版本了!");
// 得到新版本下载地址给变量new_url
GetPrivateProfileString("URL","URL",0,new_url,100,"c:\\version.ini");
}
else
SetDLgItemText(IDC_VER,"抱歉。
还没有新版本!");
DeleteFile("c:\\version.ini"); //用完后删除
}
else
SetDLgItemText(IDC_VER,"网络连接失败!");
在IDC_DOWNLOAD 按钮事件里输入以下代码以便打开IE浏览器下载新文件:
ShellExecute(this->m_hWnd,"open",new_url,NULL,"c:\\",SW_SHOW);
现在我们编辑一个VERSION.INI文件,并放到主页里,然后就可以实现新版本检查功能了!
本文只是讲述一个编程思路,具体功能还要各位编程爱好者自己去完善,比如:如果你想让程序自动升级版本,那么你需要把这个版本检查程序做成一个单独的EXE文件,通过它来检查新版本,并从服务器上下载新版本来覆盖旧版本!这些功能,大家就根据自己的需要去实现吧!
注:本程序在VC++6.0, Windows XP 下调试通过!。