ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:368.98KB ,
资源ID:11116507      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11116507.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c#自动更新+安装程序的制作.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

c#自动更新+安装程序的制作.docx

1、c#自动更新+安装程序的制作一、自动更新的实现让客户端实现自动更新,通常做法是在客户端部署一个单独的自动更新程序。主程序启动后,访问服务端,检查配置文件是否有更新版本,有更新版本就启动更新程序,由更新负责下载更新版本,并更新客户端程序,流程如下:当流程进行到红色部分的是后就调用更新程序进行更新。1)版本判断:客户端和服务端都部署同一个版本文件,客户端登陆时发送验证给服务端判断版本是否一致。Version.xml代码 query xmlns= version=20090922 lastUpdateTime=2009-09-22fileUrl=http:/172.0.0.1/UCCompanion

2、/UCCompanionSetup(0922).zip x xmlns= 版本文件主要比较服务端Version.xml文件和客户端Version.xml文件中Version(版本号)是否一致,如果服务端Version属性大于客户端的Version属性,则通过服务端的fileUrl属性获取新版本的下载地址。供更新程序使用。 2)删除原有更新包所有客户端更新文件均下载到C:Documents and Settings当前用户名Local SettingsTemp 文件夹内,当客户端运行后首先判断是否有新更新包需要下载,如果没有则判断该临时文件夹内是否有旧有安装文件,如果存在,则删除旧有安装文件。p

3、rivate void RemoveOldSetupFile() try string temp = System.Environment.GetEnvironmentVariable(TEMP); string folder = new DirectoryInfo(temp).FullName; if (File.Exists(folder + + setupName + .exe) File.Delete(folder + + setupName + .exe); if (File.Exists(folder + + setupName + .msi) File.Delete(folder

4、 + + setupName + .msi); catch 备注:关于获取系统特殊文件夹的方法见博客 3)启动下载程序下载程序和客户端程序是相互独立的,可以通过客户端开启新线程启动下载程序。下载程序在文件下载结束后可以关掉客户端程序,并开启新线程启动安装程序进行安装。private void Update() if (ShouldUpdate(query.Version, this.version) MessageBox.Show(请更新客户端文件到版本 + query.Version + , 更新提示, MessageBoxButtons.OK,MessageBoxIcon.Asterisk

5、); System.Diagnostics.Process.Start(Application.StartupPath + AutoUpdater.exe, query.FileUrl); else RemoveOldSetupFile(); private bool ShouldUpdate(string serverVersion, string localVersion) if (!string.IsNullOrEmpty(serverVersion) & !string.IsNullOrEmpty(localVersion) return serverVersion.CompareTo

6、(localVersion) 0; return true; 调用AutoUpdater.exe文件时需要传入文件下载地址。System.Diagnostics.Process.Start(Application.StartupPath + AutoUpdater.exe, query.FileUrl); 4)下载程序代码下载程序界面 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;

7、using System.Windows.Forms;using System.Net;using System.IO;using System.Threading;using System.Diagnostics;namespace AutoUpdater public partial class MainForm : Form private WebClient client; private string URl; private string fileName; private string path; private const string applicationFile = Se

8、tup; public MainForm(string url) InitializeComponent(); this.URl = url; client = new WebClient(); client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); c

9、lient.Proxy = WebRequest.DefaultWebProxy; client.Proxy.Credentials = new NetworkCredential(); this.Hide(); /Thread thread = new Thread(UpdateFile); /Thread.Sleep(15000); /thread.Start(); UpdateFile(); public MainForm() InitializeComponent(); / / 下载完成调用 / / / void client_DownloadFileCompleted(object

10、sender, AsyncCompletedEventArgs e) label1.Text = 文件接收完成; UnZip(); RunUpdate(); / / 下载进度条 / / / void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) this.progressBar1.Value = e.ProgressPercentage; / / 开始下载 / private void StartDownload() fileName = URl.Substring(URl.L

11、astIndexOf(/) + 1, URl.Length - URl.LastIndexOf(/) - 1); path = GetTempFolder(); try WebRequest myre = WebRequest.Create(URl); catch (Exception ex) MessageBox.Show(ex.Message, Error); try label1.Text = 开始下载文件.; client.DownloadFileAsync(new Uri(URl), path + + fileName); catch (WebException exp) label

12、1.Text = exp.Message; / / 解压压缩包,格式必须是*.zip,否则不能解压 / 因为是调用Windows内部api进行解压,只能够识别zip压缩包 / 必须添加C:WINDOWSsystem32shell32.dll的引用 / private void UnZip() try Shell32.ShellClass sc = new Shell32.ShellClass(); Shell32.Folder SrcFolder = sc.NameSpace(this.path + + this.fileName); Shell32.Folder DestFolder = s

13、c.NameSpace(this.path); Shell32.FolderItems items = SrcFolder.Items(); DestFolder.CopyHere(items, 20); catch (Exception ex) MessageBox.Show(ex.Message); / / 获取下载文件夹地址及解压文件存放地址 / 此地址默认为C:Documents and Settings当前用户名Local SettingsTemp 文件夹 / / private string GetTempFolder() string folder = System.Enviro

14、nment.GetEnvironmentVariable(TEMP); return new DirectoryInfo(folder).FullName; / / 开始下载文件 / private void UpdateFile() this.Hide(); /如果临时文件夹存在setup安装文件,就直接调用安装文件 if (File.Exists(GetTempFolder() + + applicationFile + .exe) & File.Exists(GetTempFolder() + + applicationFile + .msi) label1.Text = 开始下载文件.

15、; this.progressBar1.Value = this.progressBar1.Maximum; label1.Text = 文件接收完成; RunUpdate(); /如果临时文件夹不存在setup安装文件,就从网络下载 else RemoveSetupFile(); StartDownload(); / / 清除旧有已下载的安装文件 / private static void RemoveSetupFile() try string temp = System.Environment.GetEnvironmentVariable(TEMP); string folder = n

16、ew DirectoryInfo(temp).FullName; if (File.Exists(folder + + applicationFile + .exe) File.Delete(folder + + applicationFile + .exe); if (File.Exists(folder + + applicationFile + .msi) File.Delete(folder + + applicationFile + .msi); catch / / 下载完毕,开始执行更新程序 / private void RunUpdate() try foreach (Proce

17、ss p in Process.GetProcesses() if (p.ProcessName.ToLower().StartsWith(uccompanion) if (MessageBox.Show(UCCompanion正在运行,是否关闭当前程序安装更新?, 安装UCCompanion,MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) p.Kill(); Process.Start(GetTempFolder() + + applicationFile + .exe); else MessageB

18、ox.Show(UCCompanion下载完成,将在下次启动时提醒更新!); catch (Exception ex) MessageBox.Show(ex.Message); finally this.Close(); / / 重载WindProc判断点击关闭按钮(X)时,隐藏程序界面 / / protected override void WndProc(ref Message msg) const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; if (msg.Msg = WM_SYSCOMMAND & (int)msg.

19、WParam = SC_CLOSE) this.Hide(); return; base.WndProc(ref msg); / / 双击图标弹出界面 / / / private void icon_notify_MouseDoubleClick(object sender, MouseEventArgs e) this.Show(); this.WindowState = FormWindowState.Normal; / / / / / private void MainForm_SizeChanged(object sender, EventArgs e) if (this.Window

20、State = FormWindowState.Minimized) this.Hide(); private void MainForm_Load(object sender, EventArgs e) this.Hide(); static class Program / / 启动,接收传入网址作为参数 / / STAThread static void Main(string agr) if (agr.Length = 1 & agr0.StartsWith(http:/) MainForm form = new MainForm(agr0); Application.Run(form)

21、; 程序代码将AutoUpdater项目生成的文件添加到客户端文件中,在客户端的Update()方法里调用updater,实现更新文件的下载。以上就已经实现了自动更新功能,下面将讨论文件安装包的制作。 二、安装包的制作1)创建安装项目2)鼠标右击Setup项目选择视图,可以看到制作安装包常见的视图有以下几个最常用的视图有“文件系统”,“用户界面”和“启动条件”。3)指定安装属性鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性a.需要注意的是Version属性,每次版本更新时Version值必须后面的版本大于前面的版本。每次更改Version值时Projectcode

22、会更改一次。其中你修改安装项目的版本号时,比如从v1.00 到1.01,在你再次生成项目的时候,会提示你是否允许修改ProductCode,选择是,程序会自动修改ProductCode,选择否将保持相同的ProductCode,即不能自动卸载旧的版本.b.在以后版本中要确认和以前的版本两个版本有不同的ProductCode和相同的UpgradeCodec.manufacturer属性指定制造商名称。d.detectnewerinstalledversion属性选择为true,e.removepreviousversions选择为true鼠标左键单击项目名称,此次是右键单击,然后点击属性,弹出属

23、性页,选择“系统必备”。在打开的系统必备页中,选中如下中的选择项,这个很重要!1!选上以后,在生成的安装文件包中包含.netframework组件.(这个选项默认是没有选中的)。4)文件系统视图文件系统视图左侧根目录树下有3个子节点。a.应用程序文件夹:将所有待打包的应用程序的可执行文件和相应的类库和组件拖动到该目录下。该目录可以创建子目录,项目安装完毕以后的文件夹结构会和该目录下结构一致。如图:然后右击左边的应用程序文件夹打开属性对话框,修改文件释放路径,ProgramFilesFolderManufacturerProductName。安装程序默认安装目录会是c:programm file

24、制造商名称安装解决方案名称;b.用户的“程序”菜单和用户桌面:用于在开始菜单创建文件快捷方式在应用程序文件夹中将需要生成的快捷方式的文件添加快捷方式并拖动到用户的“程序”菜单和用户桌面c.添加文件卸载功能在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:windowssystem32文件夹下。为其在程序菜单添加一个快捷方式,把他的名字改成Uninstall.exe,指定Icon快捷方式显示的图标。然后下面我们要的做的就是查找这个部署项目的ProductCode了,鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性,这个区别很大,这时你就

25、可以看到ProductCode了然后打开你创建的那个卸载程序的快捷方式的属性对话框,在Aguements属性中输入/x ProductCode5)用户界面视图在“欢迎使用”后,“安装文件夹”前添加“许可协议”对话框。licensefile选择协议,协议的格式为rtf。6)启动条件视图为启动安装程序制定最低framework要求。7)实现安装、卸载过程中的其他额外的操作。比如安装结束后启动程序,卸载程序后同时删除网络下载打安装包等功能。a.新建一个空的项目InstallCompenent,步骤为:解决方案-右键添加-新建项目-选择空项目-输入名称InstallCompenent-确定,完成项目的

26、添加.b.在InstallCompenent项目中右键-添加-新建项-选择安装程序类-输入名称Installer,完成installer类的添加.修改代码为:using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Configuration.Install;using System.Reflection;using System.IO;namespace InstallCompenent RunInstaller(true) public partial class Uccompa

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2