实例介绍文件下载,注册表操作等基本技巧!(原创)

原创 2004年08月17日 14:31:00

??? 本人学.NET时间也不是很长,写一点东东出来,大家共享,错误之处肯请指出。好了进入正题。

??? 这个小程序是我为一个朋友的公司做的,本身技术含量不是很高,都是一些C#简单的应用,在制作

的过程中特别体会到用.NET开发Windows应用程序的方便和快捷。

??? 程序的功能就是完成对应用程序的升级。思路就是把需要升级的文件打成压缩包,升级程序通过把

??? 压缩包下载到本地后再自动解包,把文件覆盖到应用程序的指定目录。这个过程中还提到现两个问

题就是在更新的时候要把应用程序的主程序给关闭,升级完了还要再启动。下面就请看整个的实现:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Threading;
using System.Diagnostics;
using Microsoft.Win32;
using System.Runtime.InteropServices;

[DllImport("unZip.dll")]
??public static extern int MyZip_ExtractFileAll(String ZipFile,String PathName);//这个声明要放在窗体类里

private void Form1_Load(object sender, System.EventArgs e)
??{
???Thread ds_test = new Thread(new ThreadStart(test));//建立了一个线程
???ds_test.IsBackground=true;
???ds_test.Start();??

????/* 整个程序也就是从这里开始。在Form1_Load事件里我抛出了一个线程来执行测试网络连通性,因为在Form1_Load事件里写太多的代码,我怕影响窗体启动的速度。*/
??}
??//测试网络是否连通的函数
??private void test()
??{???
???label1.ForeColor=System.Drawing.Color.Red;//标签显示“正在检测网络配置”
???try??? //用try和catch结构来获得ServerAddress.GetResponse()的异常,给出相应的提示
???{
????WebRequest ServerAddress=WebRequest.Create("http://www.zz.ha.cn/");
????ServerAddress.GetResponse();//返回对Internet请求的响应
????label6.Text="服务器已连接";??

?? }

catch
???{
????MessageBox.Show("网络连接失败,请确定您的机器已经接入互联网","鼎晟智能升级程序",MessageBoxButtons.OK,MessageBoxIcon.Warning);
????Application.Exit();???
???}
????label2.ForeColor=System.Drawing.Color.Red;//标签显示“正在关闭当前打开的应用程序”

????KillProcess();??//调用关闭进程的函数,来关闭应用程序

????Thread ds_downlistfile = new Thread(new ThreadStart(downlistfile));//抛出新的线程来下载升级包
????ds_downlistfile.IsBackground=true;
????ds_downlistfile.Start();
???}?
??}

//下载升级文件包
??private void downlistfile()
??{
??????? label3.ForeColor=System.Drawing.Color.Red; //下载升级文件
???????
???????string pathName=ReadReg();//获得安装程序的位置
?????? string zipFile=pathName+"//ltxupgrade.zip";?//指定下载到本地的路径????
?????? string myStringWebResource=null;
?????? myStringWebResource="http://www.ds-software.net/soft/ganzhou/ltxupgrade.zip";?//指定网上文件的地址
?????? WebClient myWebClient=new WebClient();
????try
????{
????????myWebClient.DownloadFile(myStringWebResource,zipFile);??//从指定的地址下载文件到本地
?????}
????catch
????{
?????MessageBox.Show("下载升级包没有成功!请重新启动本升级程序!","鼎晟智能升级程序",MessageBoxButtons.OK,MessageBoxIcon.Warning);
?????Application.Exit();?????
????}
???label4.ForeColor=System.Drawing.Color.Red;
???unZipFile(zipFile,pathName);//因为升级文件是在压缩包里所调用解压函数把文件解出来
??}
??

//把升级包中的文件覆盖到程序目录

//这里使用了unZip.dll,这个dll可以完成压缩和解压缩的功能。采用标准的压缩模式。
??private void unZipFile(string zipFile,string pathName)
??{
???int m=MyZip_ExtractFileAll(zipFile,pathName);
???if(m<0)
???{
????MessageBox.Show("更新文件失败!","鼎晟软件智能升级程序");
????Application.Exit();
???}
???else if(m==0)
???{
????MessageBox.Show("升级包中存在错误,请联系鼎晟科技技术服务!服务电话0371-7438877","鼎晟软件智能升级程序",MessageBoxButtons.OK,MessageBoxIcon.Warning);
????Application.Exit();
???}
???MessageBox.Show("恭喜您!软件已经更新成为最新版本,谢谢您的使用!确认后升级程序将启动先前关闭的程序","鼎晟软件智能升级程序");
???startgz_app();?//调用启动应用程序的函数
???Application.Exit();???
??}
??//杀掉工资软件的进程
??private void KillProcess()
??{
???System.Diagnostics.Process myproc= new System.Diagnostics.Process();
???//得到所有打开的进程
???try
???{
????foreach (Process thisproc in Process.GetProcessesByName("ltx"))?

//应用程序在进程列表里的名字 ltx ,遍历整个进程列表,找到这个名字的进程,
????{?????
??????thisproc.Kill();??//调用kill()方法杀掉进程???????????
????}
???}
???catch
???{
????MessageBox.Show("试图关闭当前鼎晟工资软件失败!请先关闭,然后重新启动本升级程序!","鼎晟智能升级程序");
????Application.Exit();???
???}
??}
//启动应用程序的函数???

private void startgz_app()
??{
???System.Diagnostics.ProcessStartInfo? Info? =? new? System.Diagnostics.ProcessStartInfo();???
???Info.FileName? =? "ltx.exe";

?? String KeyValue=ReadReg();
???Info.WorkingDirectory? = KeyValue;
???System.Diagnostics.Process? Proc? ;
???try
???{
????Proc? =? System.Diagnostics.Process.Start(Info);
????oprogress(100);
????
???}
???catch
???{
????MessageBox.Show("找不到执行文件,请安装鼎晟人事工资管理系统","鼎晟智能升级");
???}
??}

//读取注册表的apppath获得应用程序的安装路径

private?string?ReadReg()

{

? ?RegistryKey reg1=Registry.LocalMachine;
???RegistryKey reg2=reg1.OpenSubKey("SOFTWARE");
???RegistryKey reg3=reg2.OpenSubKey("离退休人员管理系统");//应用程序在注册表里的名称
???String AppPath=reg3.GetValue("apppath").ToString();??//获得apppath的值

?? return AppPath;//返回应用程序所在的路径

}
//在关闭事件里提供判断防止用户无意关闭升级程序

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
??{
???
???if (MessageBox.Show("您是否要退出升级程序","鼎晟智能升级程序",MessageBoxButtons.YesNo,MessageBoxIcon.Question)
????== DialogResult.Yes)
???{
????Application.Exit();
???}
???else
???{
????e.Cancel=true;
???}???
??}???
?}

到这里整个程序就完成了,希望这个简单的应用程序能给需要的人带来帮助。

关于应用程序调用的unZip.dll我将专门写出它的声明方法,并提供文件的下载。

伪原创文章的方法

1.修改标题 标题是搜索引擎读取相关数据的第一步,因此,伪原创内容页的全新标题,搜索引擎而言对这个页面的评价也就高些。具体 的操作技巧有,添加或删减词语词组、换汤不换药(全新的描述方式,意义雷同)、同...
  • zongcaihui
  • zongcaihui
  • 2015年10月12日 15:18
  • 243

小何讲Linux: 基本文件操作和实例

open()函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 close()函数是用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭,...
  • rl529014
  • rl529014
  • 2016年05月06日 20:52
  • 4143

数据挖掘方法案例介绍

文章来源:http://www.itongji.cn/article/111329232013.html 数据挖掘方法案例介绍 发表于 2013-11-14 22:14 来源:...
  • buster2014
  • buster2014
  • 2015年07月31日 14:47
  • 563

文件的基本操作技巧

文件的创建以及文件信息的获取: 首先,创建一个FileutilDemo.java类又来保存文件名字: import java.io.File; public class FileUtilDemo...
  • agonie201218
  • agonie201218
  • 2015年05月07日 21:23
  • 427

C# 文件重定向

我们已经知道:     ①:本机模式 64 位程序运行在纯模式下,并且访问键和存储在以下注册表子键中的值:HKEY_LOCAL_MACHINE\Software     ②:32 位程序运...
  • By__myself
  • By__myself
  • 2017年06月24日 09:31
  • 321

hadoop(一)--安装和基本使用

一、简介 从这起,开始介绍大数据相关的知识,这里介绍hadoop。 hadoop是apache开发的分布式系统。在分布式环境中,用于大数据量的存储和处理。 hadoop主要由两部分组成,hdfs...
  • chinabestchina
  • chinabestchina
  • 2018年01月06日 18:08
  • 13

文件的基本操作

①、文件的创建、打开、关闭; 文件的创建、打开:CFile::Open 文件的关闭:CFile::Close CFile::modeCreate:以新建方式打开,如果文件不存在,则新建;如果文件已存在...
  • u010679895
  • u010679895
  • 2013年07月31日 17:04
  • 866

Mybatis使用技巧

以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔记。 1、插入时主键返回      我们向数据库插入一条记录是,使用Mybatis的是无法返回插入的主键的,而我们需...
  • fengshizty
  • fengshizty
  • 2015年12月12日 11:26
  • 2361

python常用文件操作方法整理

内容参考自《python变成快速上手》首先明确一点,Windows的路径在python中写为(‘c:\Users\xxx’);mac OS和Linux则写成(‘usr/bin/xxx’)。此处需要用到...
  • lajiasd123
  • lajiasd123
  • 2016年12月07日 13:26
  • 331

VS2013编程实用小技巧

1. Peek View可以在不新建TAB的情况下快速查看、编辑一个函数的代码。用法:在光标移至某个函数下,按下alt+F12,显示Peek窗口,按F12直接转到定义。 然后在Peek窗口里可以...
  • zx3517288
  • zx3517288
  • 2016年10月26日 21:58
  • 1452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实例介绍文件下载,注册表操作等基本技巧!(原创)
举报原因:
原因补充:

(最多只允许输入30个字)