版权声明:我的博客我做主! https://blog.csdn.net/lk1822791193/article/details/85603721
上一篇博客,分享了如何通过程序下载服务器中的更新文件,这次我为大家分享一下,如何将下载好的更新文件的压缩包解压并替换掉之前的文件。
1.由于我们设定的是程序关闭之后提醒用户,是否更新软件,所以我们需要将解压的程序独立出来,否则,更新程序和执行的程序同时执行会导致,无法替换旧版本的系统。
2.由于解压程序和系统程序分离,所以我们解压之前,需要判断(与服务器的版本号进行对比),是否触发解压程序。
解压代码(解压程序中):
/// <summary>
/// 更新文件成功方法(返回true/false)
/// </summary>
/// <param name="dir">本地程序运行路径</param>
/// <param name="zipfile">本地压缩文件路径</param>
/// <returns></returns>
public bool Replace()
{
//创建服务客户端
UpdateServiceClient client = new UpdateServiceClient();
//接受服务器的版本等信息
List<string> stringList = client.SelectVersion();
//文件名
string fileName = stringList[1].ToString();
// GetCurrentDirectory
// 摘要:获取应用程序的当前工作目录
// 返回结果:包含当前工作目录的路径且不以反斜杠 (\) 结尾的字符串。
string dir = Directory.GetCurrentDirectory();
//压缩包的路径
string zipfile = Path.Combine(dir, fileName + ".zip");
//当前工作目录中新建临时文件NewVersion存放新版本文件
string extractPath = Path.Combine(dir,"version");
//解压缩文件到NewVersion中
ZipFile.ExtractToDirectory(zipfile, extractPath);
//遍历所有解压出来的文件
foreach (string item in Directory.GetFiles(extractPath))
{
//把文件更新到程序运行路径
File.Copy(item, System.IO.Path.Combine(dir, System.IO.Path.GetFileName(item)), true);
}
//删除压缩包
File.Delete(zipfile);
DirectoryInfo di = new DirectoryInfo((extractPath));
//删除临时文件夹
di.Delete(true);
return true;
}
系统退出的方法中添加启动解压程序(运行程序中):
// 获取当前执行程序的路径
string dir = Directory.GetCurrentDirectory();
// 实例化下载类
DownLoad dl = new DownLoad();
// 判断是否有版本
// isUpdate方法去判断是否需要更新
// 此方法上片博客里有方法体
if (dl.IsUpdate())
{
// 启动一个新的程序
Process unZip;
// 程序的路径和名字
unZip= Process.Start(dir + "\\update" + ".exe");
}
大家需要注意的就是:我们需要把解压程序中生成的exe以及所需的dll拷贝到运行程序bin中的debug文件中(与Process.Start()中的路径相同就可以)。
核心代码的话就这些了,关于服务器的设置,可以将更新的文件打成压缩包,然后发布到IIS服务上,然后使用ftp协议进行传输,这样可能不太安全,所以也可以同nigx反向代理,将压缩包方法网站上,通过http协议进行传输。
小编只是简单总结实现,如有不足,欢迎大神指点!