求教winform程序winform自动升级级的方案

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
.net编程人员
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(7212)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'c# winform 自动升级',
blogAbstract:'
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}本帖子已过去太久远了,不再提供回复功能。WinForm应用程序中实现自动更新功能WinForm应用程序中实现自动更新功能
编写人:左丘文
近来在给一客户实施ECM系统,但他们使用功能并不是我们ECM制造版提供的标准功能,他们要求对系统作一些定制功能,为了避免因程序的bug而带来频繁让用户更新程序的不良影响,就想给ECM增加一个winform自动更新功能,今天在这里,我想与大家一起分享代码,在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。
1、首先我们在这里先分析一下其它程序猿的一些基本情况:
相信有许多程序猿都喜欢用Winform做开发吧?!因为Winform相对Webform而言,优点是,功能更强大,编程更方便.但是它的缺点,就是软件的安装及维护是相当麻烦地,要实现软件更新,需要到客户端一台一台地升级。
长期以来,广大程序猿为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级。现在好了,我们的目标很简单,我们希望开发一个与具体应用无关的能够复用的自动升级系统。下面我为大家提供了一套可复用的用C#实现在线升级。这里分为本地在线升级,也可以利用webservice 在线通过互联网与软件开商的服务器在线升级。
2、实现软件自动在线升级的原理:
1) 写三个程序,一个是主程序;两个是升级程序;所有升级任务都由升级程序完成
原本只需要一个升级程序,但在这里,由于我们另外还涉及到了,在线与软件供应商服务器更新功能,因此我们这里用到了一个主程序两个升级程序。
2) 很多人实行的原理是将现有版本与最新版本作比较,发现最新的则提示用户是否升级,当然也有人用其它属性比较的,例如:文件大小或者更新日期。我们这里主要利用FileUtil的两个属性SHA1File与File来判断,与服务器之间是否存在版本差异,存在就更新。
3) 我们的程序,刚开始初始版本是我一同事利用了三天时间,大致写了一个框架出来,我是在他的基础上,对其进行了完善,如增加了对文件流的压缩与解压缩功能,方便进行网络的传输,增加了通过webservices的在线更新功能。并将程序做到通用功能,并嵌套到了我们的ECM系统中。
3、软件更新操作界面:
1) 启动我们的主程序ECM
2) 系统会从中检查是否有新版本,点点【否】会直接进入系统,点【是】系统会进入到更新介面:
先择需要更新的内容,点击更新,系统会自动更新相关程序。
3) 与软件供应商服务器在线更新介面:
操作类似于在线本地更新一样。
具体就需要各位好好的自已去调试了。
4、更新程序的代码:
1) 我们的更新程序是以文件流的形式存放在数据库中,因此我们首先需要为系统数据库增加相关的表,用于存储更新文件。
--建立相关表SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[SysUpdate]([ID][int]IDENTITY(1,1)NOTNULL,[FileName][varchar](250)NULL,[FileVersion][varchar](50)NULL,[FilePath][varchar](250)NULL,[FileData][varbinary](max)NULL,[FileSize][varchar](250)NULL,[FileDate][varchar](250)NULL,[FileType][varchar](50)NULL,[FilesHash][varchar](max)NULL,[FilesMD5][varchar](max)NULL,[UpdateBit][bit]NULL,[RegBit][bit]NULL)ON[IMARY]GOSETANSI_PADDINGOFF--建立插入SPSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOcreateprocedure[dbo].[Insert_UpdateFile]@filenamevarchar(250),@fileversionvarchar(50),@filepathvarchar(250),@filesizevarchar(250),@filedatevarchar(250),@filetypevarchar(50),@fileshashvarchar(250),@filesmd5varchar(250),@filevarbinary(Max)asinsertintoSysUpdate([FileName],[FileVersion],[FilePath],[FileSize],[FileDate],[FileType],[UpdateBit],[RegBit],[FilesHash],[FilesMD5],[FileData])select@filename,@fileversion,@filepath,@filesize,@filedate,@filetype,1,0,@fileshash,@filesmd5,@fileView Code
2) 整体程序框架图如下:
3) 上传功能代码:
namespaceSysUpdate{publicpartialclassfrmSysUpdateUp:Form{privatestringupdateUrl=string.EprivatestringtempUpd
优质网站模板clickonce自动升级(winform)
1.在VS.NET2010中打开工程。
2.在”解决方案资源管理器”中选择” BudgetMain”,然后右键选择 属性。
3.在属性对话框的左边选择 “发布” 选项。如下图所示:
4.设置更新选项:
6.拷贝发布成功之后的软件文件夹给用户即可
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。winform自动升级遇到的一个问题(关闭主程序问题)-.NET技术/C#-c/c++-电脑编程网winform自动升级遇到的一个问题(关闭主程序问题)-.NET技术/C#作者:ccj188 和相关&&我为我的程序做了一个自动升级功能。主程序为servicepj.exe 升级升级程序为update.exe当主程序启动时检查的程序版本,如版本比本机新就弹出升级程序提示升级文件下载完毕后作更新操作,我的操作时这样的:1,升级程序先检查主程序时候在运行,如果在进程中找到主程序的进程,就关闭它,&
Process[] pra = Process.GetProcesses();&
foreach (Process pro in pra)&
if (pro.ProcessName.ToLower().StartsWith(&servicepj&))&
pro.Kill();&
pro.Close();&
Thread.Sleep(3000);2,拷贝下载的新版本的程序到主程序目录(覆盖形式)&
File.Copy(Application.StartupPath + @&\tmp\新文件&, Application.StartupPath + &\\新文件& ), true);问题就出在上面这句,会提示主程序由另一进程正在调用,无法操作。请高手指点!------回答---------------其他回答(10分)---------加壳了吧 需要壳保护的线程一起关掉------其他回答(20分)---------
你看看 拷贝时 你的程序是否真的退出了以及文件是否可写
------其他回答(10分)---------在判断有升级文件后,在主程序中启动升级程序后即可以将主程序关闭,在升级成功后再启动主程序。相关资料:|||||||winform自动升级遇到的一个问题(关闭主程序问题)-.NET技术/C#来源网络,如有侵权请告知,即处理!编程Tags:                &                    }

我要回帖

更多关于 winform 应用程序升级 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信