| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3250 人关注过本帖
标题:c#WinForm如何实现在线更新功能
只看楼主 加入收藏
gsbe1987
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-4-14
结帖率:100%
收藏
 问题点数:0 回复次数:9 
c#WinForm如何实现在线更新功能
c#WinForm如何实现在线更新功能,比如更新客户端的主程序及一些DLL之类的文件,我是想在服务器端有一个XML文件,当启动更新功能时,就读取XML并与客户端的XML进行比较版本的大小,一旦需要更新,服务器端将文件下载到本地,但是WinForm的下载怎么做的我不知道,希望能有高手指点一下,我自己有尝试写了一段,可以执行,但是如果是DLL文件,里面的大部分信息都会丢失

代码如下:

程序代码:
                long fileLength;
                string server = string.Format(@"{0}/Update/AutoUpdate.xml", ConfigurationManager.AppSettings["ServerUpdateAddress"]);
                string client = string.Format("{0}\\{1}", Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["ClientUpdateAddress"]);
                WebRequest request = WebRequest.Create(server);
                WebResponse response = request.GetResponse();
                fileLength = response.ContentLength;
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                byte[] byteData = new byte[fileLength];

                stream.Read(byteData, 0, (int)fileLength);
                //FileStream file = new FileStream(client, FileMode.OpenOrCreate);
                FileStream file = new FileStream(client, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                file.Write(byteData, 0, byteData.Length);

                file.Flush();
                stream.Close();
                reader.Close();
                file.Close();
搜索更多相关主题的帖子: 在线 WinForm 
2009-10-28 10:51
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:0 
实在不懂

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-10-28 20:16
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
利用ClickOnce ,你的所有问题全部解决..

而且根本就不用你去判断

飘过~~
2009-10-28 20:45
gsbe1987
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-4-14
收藏
得分:0 
以下是引用bygg在2009-10-28 20:45:01的发言:

利用ClickOnce ,你的所有问题全部解决..

而且根本就不用你去判断
你说的这个我知道,但是我是要做的传统的安装程序,用ClickOnce的话,安装是通过访问站点的,而且安装路径也是固定的

便宜又好看的U盘,款式多多~~店铺地址:http://shop34991947.
2009-10-29 08:52
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
那你要到服务器上去检验,就不用网络了?
ClickOnce不是有三种模式吗?呵呵。。当然可能还是不能满足你的要求。但是你这种,如果文件比较大,你判断起来也许时间还花得多些。个人看法而已

飘过~~
2009-10-29 12:29
gsbe1987
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-4-14
收藏
得分:0 
以下是引用bygg在2009-10-29 12:29:11的发言:

那你要到服务器上去检验,就不用网络了?
ClickOnce不是有三种模式吗?呵呵。。当然可能还是不能满足你的要求。但是你这种,如果文件比较大,你判断起来也许时间还花得多些。个人看法而已
我是这样做,在服务器空间里会有一个XML文件,里面是要更新的软件升级文件的名称,我会先把这个XML文件下载到程序安装目录的临时文件夹中,然后读取这个XML文件,将对应的文件从服务器空间下载下来

便宜又好看的U盘,款式多多~~店铺地址:http://shop34991947.
2009-10-29 17:13
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
哦,那如果文件很大呢?
你的网络可以吗?
最大允许多少人同时更新?

飘过~~
2009-10-29 20:42
gsbe1987
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-4-14
收藏
得分:0 
升级的文件主要是编译生成的DLL类库文件,而且我把程序是分系统分模块编写的,所以DLL文件比较多,某一模块改了代码就编译那个DLL然后给替换掉原来的就行了,每个DLL也就几MB,而且也不是每次更新都全部更新,只更新改动的那个模块的DLL就可以了,所以网络应该不会有问题,至于允许多少人,这个还没试过,不太清楚,呵呵,肯定是要一步步改进的

便宜又好看的U盘,款式多多~~店铺地址:http://shop34991947.
2009-10-30 09:42
一叶之秋
Rank: 2
等 级:论坛游民
帖 子:13
专家分:29
注 册:2009-10-30
收藏
得分:0 
不会,帮顶
2009-10-30 09:59
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
既然多数是DLL,那你就判断DLL文件的版本吧.
你每更新一次,让那些DLL文件的版本自动提升一个版本,这样估计会快些.

飘过~~
2009-10-30 10:37
快速回复:c#WinForm如何实现在线更新功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020824 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved