- 浏览: 233045 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
net_liu:
zxptian 写道楼主能把TransferFiles也贴出来 ...
c# Socket 文件的传输 -
zxptian:
楼主能把TransferFiles也贴出来分享下吗?
c# Socket 文件的传输
C#实现程序动态升级版本。通过反射获取本地版本,然后跟服务器中的版本进行对比,从而实现版本更新。(参考别人的,供自己记忆和参看)
1.把代码编译为一个类库文件,通过程序引用
namespace SoftUpdate { /// <summary> /// 更新完成触发的事件 /// </summary> public delegate void UpdateState(); /// <summary> /// 程序更新 /// </summary> public class Update { private string download; private const string updateUrl = @"d:\update.xml";//升级配置的XML文件地址 #region 构造函数 public Update() { } /// <summary> /// 程序更新 /// </summary> /// <param name="file">要更新的文件</param> public Update(string file, string softName) { this.LoadFile = file; this.SoftName = softName; } #endregion #region 属性 private string loadFile; private string newVerson; private string softName; private bool isUpdate; /// <summary> /// 或取是否需要更新 /// </summary> public bool IsUpdate { get { checkUpdate(); return isUpdate; } } /// <summary> /// 要检查更新的文件 /// </summary> public string LoadFile { get { return loadFile; } set { loadFile = value; } } /// <summary> /// 程序集新版本 /// </summary> public string NewVerson { get { return newVerson; } } /// <summary> /// 升级的名称 /// </summary> public string SoftName { get { return softName; } set { softName = value; } } #endregion /// <summary> /// 更新完成时触发的事件 /// </summary> public event UpdateState UpdateFinish; private void isFinish() { if (UpdateFinish != null) UpdateFinish(); } /// <summary> /// 下载更新 /// </summary> public void UpdateMethod() { try { if (!isUpdate) return; WebClient wc = new WebClient(); string filename = ""; string exten = download.Substring(download.LastIndexOf(".")); if (loadFile.IndexOf(@"\") == -1) filename = "Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten; else filename = Path.GetDirectoryName(loadFile) + "\\Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten; wc.DownloadFile(download, filename); wc.Dispose(); isFinish(); } catch { throw new Exception("更新出现错误,网络连接失败!"); } } /// <summary> /// 检查是否需要更新 /// </summary> public void checkUpdate() { try { WebClient wc = new WebClient(); Stream stream = wc.OpenRead(updateUrl); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(stream); XmlNode list = xmlDoc.SelectSingleNode("Update"); foreach (XmlNode node in list) { if (node.Name == "Soft" && node.Attributes["Name"].Value.ToLower() == SoftName.ToLower()) { foreach (XmlNode xml in node) { if (xml.Name == "Verson") newVerson = xml.InnerText; else download = xml.InnerText; } } } Version ver = new Version(newVerson); Version verson = Assembly.LoadFrom(loadFile).GetName().Version; int tm = verson.CompareTo(ver); if (tm >= 0) isUpdate = false; else isUpdate = true; } catch (Exception ex) { throw new Exception("更新出现错误,请确认网络连接无误后重试!"); } } /// <summary> /// 获取要更新的文件 /// </summary> /// <returns></returns> public override string ToString() { return this.loadFile; } } }
2.XML文件类容
<?xml version="1.0" encoding="utf-8" ?> <Update> <Soft Name="BlogWriter"> <Verson>1.0.1.2</Verson> <DownLoad>D:\ilyin\Socket.rar</DownLoad> </Soft> </Update>
3.单击事件里面调用下面的方法:
public void checkUpdate() { SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "BlogWriter"); app.UpdateFinish += new UpdateState(app_UpdateFinish); try { if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Thread update = new Thread(new ThreadStart(app.Update)); update.Start(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } void app_UpdateFinish() { MessageBox.Show("更新完成,请重新启动程序!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information); }
发表评论
-
List转DataTable(反射)
2012-02-06 10:48 2741List转DataTable(反射) // ... -
DataTable转泛型
2012-01-31 17:39 1279DataTable转泛型 public clas ... -
利用鼠标钩子将鼠标中键转为左键
2011-05-04 13:50 1646利用鼠标钩子将鼠标中键转为左键 鼠标 ... -
C# 命名规范
2011-04-01 13:32 1971C# 命名规范 文章分类:.net编程 ... -
VS2008 快捷键大全
2011-04-01 13:30 916VS2008 快捷键大全[转帖] 文章分类 ... -
C# 中的委托和事件
2011-04-01 13:26 1287缩略显示 C# 中的委托和事件 文章 ... -
C#Winform限制Textbox只能输入数字
2011-04-01 13:20 7480C#Winform限制Textbox ... -
C# 跳转语句(break,continue,goto,return,throw)
2011-04-01 12:38 3435C# 跳转语句(break,continue,goto,r ... -
C#窗体固定在桌面上
2010-11-19 10:25 1651[DllImport("user32.dll& ... -
if-else 都输出的方法
2010-10-12 11:44 1308if-else 都输出的方法 if (new Func< ... -
反射技术
2010-09-15 17:42 922什么是反射? 反射就 ... -
发一个接口做参数的例子
2010-08-06 08:48 957发一个接口做参数的例子 回头接口 using System ... -
C#中使用正则表达式
2010-08-04 13:39 1338C#中的正则表达式包含 ... -
C#的几个技巧
2010-08-04 13:35 8491.如果可能尽量使用接 ... -
反射动态调用类成员
2010-08-04 13:30 983使用反射动态调用类成员,需要Type类的一个方法:Invoke ... -
在vs2005中发送邮件
2010-08-03 16:14 1146在vs2005中发送邮件的方法如下: ... -
XML数据排序
2010-06-30 14:20 3406根据XML数据的Index 来进行排序 方法一: ... -
将DataGridView 数据导出到Excel
2010-06-25 15:46 5095/// <summary> ... -
将Excel导入到Oracle
2010-06-25 15:39 5416private void btnInsert_Click(o ... -
序列化与反序列化
2010-06-24 15:44 917多个对象序列化和反序列化 namespace Dome { ...
相关推荐
6. **部署流程**:有效的升级程序会有一套规范的部署流程,包括备份当前状态、安装新版本、验证新版本功能、切换到新版本以及回滚机制。这个流程需要自动化和脚本化,以减少人为错误和提高效率。 7. **测试**:在...
3. **AutoUpt升级程序**:这是实际的自动升级程序可执行文件,可能包含主逻辑、UI界面以及与服务器通信的代码,负责检查新版本、下载更新包并安装。 4. **DLL**:通常,DLL(动态链接库)文件包含可重用的代码模块...
PB程序自动升级与检测版本自动更新程序是一种常见的软件维护策略,尤其在企业级应用中,以确保用户始终运行的是最新、最安全的软件版本。PB是PowerBuilder的缩写,这是一种由Sybase(现为SAP)开发的可视化编程工具...
10. **DMM.AddUpdater**:这个文件名可能是升级程序的组件或模块,可能用于实现特定的升级功能,如动态加载更新、管理更新文件等。 综上所述,"版本自动升级程序修补版"意味着开发者针对之前的自动升级程序进行了...
本文将深入探讨如何利用Delphi开发一个程序自动升级系统,该系统适用于Delphi XE10及更高版本,并基于VCL(Visual Component Library)框架。 自动升级系统通常由以下几个核心组件组成: 1. **升级服务器**:这是...
本程序精简最小化。 配置文件示例: ;FileShow [cfg] ;当前版本 Version = 1.0.3 ;升级文件总数量 Files = 1 ;文件1 [f1] ;文件名,在工程中的相对路径 FileName = ./FileShow.exe ;文件MD5 FileMD5 = ;文件Url ...
在Android平台上,实现程序的更新升级是每个应用开发者必须面对的重要任务。这涉及到用户能够方便地获取新版本,以及在后台或前台无缝地完成安装过程。以下是对Android应用程序更新升级的关键知识点的详细说明: 1....
在Android平台上,应用程序的升级是一个常见且重要的过程,它涉及到版本控制、安装更新以及用户数据的处理。本文将深入探讨Android程序的升级机制,包括自动更新、手动更新、APK安装流程、版本管理以及如何处理用户...
对于那些未使用强名称签名的库,开发者可以考虑使用`Assembly.Load`方法在运行时动态加载指定版本的DLL,或者通过修改项目引用的路径来确保加载最新的DLL版本。但这通常不推荐,因为它可能导致难以跟踪和管理依赖...
在开发和部署基于Qt的软件时,可能会遇到“无法定位程序输入点于动态链接库上”的问题。这个错误通常表明程序在运行时找不到它依赖的一些动态链接库(DLLs)。以下是一个详细的分析和解决此类问题的步骤: 1. **...
最后,测试修改后的程序以确保其功能未受任何影响,特别是当版本信息被用于动态加载或依赖管理时。发布新版本时,确保更新相关的文档、安装包描述以及市场平台上的信息,提供给用户清晰的版本升级指引。 总之,修改...
- 自动升级涉及到网络访问和存储读写,需要在`AndroidManifest.xml`中添加`INTERNET`和`WRITE_EXTERNAL_STORAGE`权限(对于Android 6.0及以上,还需要在运行时动态申请权限)。 8. **处理异常情况**: - 实际开发...
1. **自动升级**:这是指程序能自动检测并应用新版本,减轻用户的维护负担。 2. **数据库**:在此上下文中,数据库可能用于存储软件更新的元数据,比如新版本信息、更新脚本等,客户端通过查询数据库来检查更新。 3....
在***(C#)环境下,为了保证程序的持续运行与功能改进,经常会遇到需要对现有程序进行版本升级的情况。自动更新功能的实现,可减少手动更新的繁琐,提高软件维护效率。以下将从多个方面详细介绍***(c#)程序版本升级...
4. **学习数据分析**:新版本可能增强了数据收集和分析功能,能够更精准地跟踪学生的学习动态,为教师和家长提供详细的学习报告,以便更好地了解学生的学习状态。 5. **教育资源更新**:随着版本升级,软件内包含的...
1. **版本控制**:升级程序会自动识别当前安装的版本号,这通常通过读取应用程序或安装目录下的XML文件来实现。XML文件可以包含版本信息,如主版本号、次版本号、修订版号等。 2. **XML结构**:XML文件可能设计成...
标题中的“ftp自动升级程序”指的是一个利用FTP(File Transfer Protocol)协议实现的软件自动更新功能。FTP是一种标准网络协议,用于在Internet上在客户端和服务器之间进行文件传输。在这个程序中,它被用于检查和...
在本例中,由于glibc的版本为2.28,可能无法满足某个程序或更新软件对更高版本glibc的需求,因此需要进行升级。同时,make工具作为构建系统的重要部分,用于自动化编译过程,其版本4.3也可能是为了适应新需求而更新...
在Android应用开发中,程序升级是一项重要的功能,它允许开发者发布新版本的软件来修复问题、添加新功能或提升用户体验。本压缩包“Android应用源码之程序如何升级.zip”包含了一个示例项目,用于展示如何实现...
通过以上步骤,我们可以构建一个完整的APP升级Demo,让应用程序能够自动或手动检查并安装新版本。这个Demo对于开发者来说是一个很好的学习资源,帮助理解Android应用升级的完整流程。在实践中,还应注意遵循最佳实践...