Winform 下载服务器安装包并安装
代码中包含了检测本地安装盘符代码
一,定义下载委托事件(用于实现前台进度条更新和下载完成后事件的回调):
private delegate void Action();
private string diverUrl = ConfigurationManager.AppSettings["diverUrl"];//http:形式
//页面初次加载事件
private void frmProgressBar_Load(object sender, EventArgs e)
{
//获取存储路径
GetRemovableDeviceId();
if (File.Exists(_drivesName))
{
//安装包存在,则直接进行安装
var process = Process.Start(_drivesName);
if (process != null) process.WaitForExit();
//Process
this.Close();
}
else
{
//安装包不存在--则下载
DownloadFile(diverUrl, _drivesName,DownloadProgressChanged, downloadFileCompleted);
}
} /// 下载
private void downloadFileCompleted()
{
Process.Start(_drivesName);
this.Close();
} /// 检测本机盘符
public void GetRemovableDeviceId()
{
List<string> drivesList = new List<string>();
DriveInfo[] dr = DriveInfo.GetDrives();
foreach (DriveInfo dd in dr)
{
if (dd.DriveType == DriveType.CDRom || dd.DriveType == DriveType.Removable) //过滤掉是光驱的 磁盘或移动U盘
{
break;
}
else
{
drivesList.Add(dd.Name);
}
}
//已驱除驱动盘
for (int i = ; i < drivesList.Count; i++)
{
//其它盘符
if (drivesList[i].IndexOf("C") == -)
{
_drivesName = drivesList[drivesList.Count - ].Replace(":\\", "")+ ":Cam_Ocx.exe";
return;
}
else
{
_drivesName = drivesList[i].Replace(":\\","") + ":Cam_Ocx.exe";
}
}
}
//下载文件
private void DownloadFile(string url, string savefile, Action<int> downloadProgressChanged, Action downloadFileCompleted)
{
WebClient client = new WebClient();
if (downloadProgressChanged != null)
{
client.DownloadProgressChanged += delegate (object sender, DownloadProgressChangedEventArgs e)
{
this.Invoke(downloadProgressChanged, e.ProgressPercentage);
};
}
if (downloadFileCompleted != null)
{
client.DownloadFileCompleted += delegate (object sender, AsyncCompletedEventArgs e)
{
this.Invoke(downloadFileCompleted);
};
}
client.DownloadFileAsync(new Uri(url), savefile);
}
//显示进度条
private void DownloadProgressChanged(int val)
{
progressBar1.Value = val;
lbValue.Text = val + "%";
}
Winform 下载服务器安装包并安装的更多相关文章
- 离线下载pip包进行安装【转】
Host-A 不能上网,但是需要在上面安装Python-package 通过另外一台能上网的Host-B主机 1. 下载需要离线安装的Packages 在Host-B上执行如下命令: 安装单个Pack ...
- 【转】用yum只下载rpm包而不安装
转自:http://liucheng.name/1950/ CentOS用yum安装软件是非常方便的,有时,我们只需要下载其中的rpm包,而不直接安装时咋办呢? 一般情况下,yum是不提供只下载的功能 ...
- Android 演示 DownloadManager——Android 下载 apk 包并安装
本文内容 环境 项目结构 演示下载 参考资料 本文是 github 上 Trinea-Android-common 和 Trinea-Android-Demo 项目的一部分,将下载部分分离出来,看看如 ...
- 18、通过yum命令只下载rpm包不安装
18.1.说明: 经常遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等,这时就需要下载 rpm 包. 18.2.方法一,yumdownloader(推荐): 如果只想通过 yum 下 ...
- 通过下载git包来安装git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用Git工具的时候,第一步要学会如何安装gi ...
- yum仅下载RPM包不安装
http://www.ttlsa.com/linux/howto-yum-download-rpm-without-install/
- pip 安装包 不行 自己下载whl 包自己安装
https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
- yum更换国内源 yum下载rpm包 源码包安装
7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 yum更换国内源 cd /etc/yum.repo.d/ 删除源 rm -f dvd.repo rm -f C ...
- 用yum下载rpm包(不安装)到指定目录
用yum下载rpm包(不安装)到制定目录 用yum下载rpm包 1.安装yum-downloadonly # yum install yum-downloadonly -y 2. ...
随机推荐
- 教你做炫酷的碎片式图片切换 (canvas)
前言 老规矩,先上 DEMO 和 源码.图片区域是可以点击的,动画会从点击的位置开始发生. 本来这个效果是我3年前做的,只是当是是用无数个 div 标签完成的,性能比较成问题,在移动端完全跑不动.最近 ...
- (转)CentOS 7.0关闭默认防火墙启用iptables防火墙
场景:在本地虚拟机上使用ftp软件需要进行相应的端口设置,不可避免要访问Cnetos的防火墙,默认firewall操作不方便,所以需要进行相应的替换. 1 配置防火墙,开启80端口.3306端口 1. ...
- Apache FtpServer 实现文件的上传和下载
1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...
- python2.7 + selenium3.4.3浏览器的选择
大家都知道,selenium2对火狐浏览器兼容性比较好,和谷歌和IE相比,好处是无需安装相应的driver.exe来支持启动浏览器,但是缺点是最高支持火狐47版本. 现在selenium3出来了,是不 ...
- Android中的内容提供者
Android中的内容提供者 为什么需要内容提供者 为了跨程序访问数据.试想如果在App-1中创建了一个私有数据库,App-2是不能直接访问的.因为权限不够,虽然可以使用chmod 777来修改权限, ...
- 中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总
中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...
- animate.css的使用
前面的话 animate.css是一个使用CSS3的animation制作的动画效果的CSS集合,里面预设了很多种常用的动画,且使用非常简单.本文将详细介绍animate.css的使用 引入 anim ...
- 关于JS中涉及的常用类型转换及运算符表达式
JS中的常用类型转换(一般用强制转换):1.强制转为整数:parseInt:写法:x = parseInt(x); 2.强制转换位小为:parseFloat:写法:x = parseFloat(x); ...
- 001-Mono for android在vs2012中发布设置
详细讲解 :http://www.cr173.com/html/20099_1.html 这里是快速设置: 1,把Debug换成Release 这里是必须改的 2,点击工具选项 3, ...
- MFC加载PNG图片并实现双缓冲
因为PNG包含Alpha通道,所以不同于BITMAP,在MFC中使用CImage类对其进行处理,通常使用load和draw成员函数. 所以标题的论述可以进一步解释为,使用CImage实现双缓冲. 通常 ...