项目中的程序需要自动更新

大概思路

1、通过主程序(判断是否需要更新)打开更新程序

2、通过更新程序关闭主程序

3、通过更新程序下载压缩包

4、解压(新的主程序)

5、打开主程序

在第五步的时候本机测试没问题,发布到另一台机子之后总是报错

另一程序正在使用此文件,进程无法访问....

经过一番排查发现问题出在解压时没有释放文件资源(不知道描述是否准确,另外为什么本机测试不报错!)

原解压代码如下:

public static void UnZip(string fileToUpZip, string zipedFolder, string password)
{
if (!File.Exists(fileToUpZip))
{
return;
}

if (!Directory.Exists(zipedFolder))
{
Directory.CreateDirectory(zipedFolder);
}

ZipInputStream s = null;
ZipEntry theEntry = null;

string fileName;
FileStream streamWriter = null;
try
{
s = new ZipInputStream(File.OpenRead(fileToUpZip));
s.Password = password;
while ((theEntry = s.GetNextEntry()) != null)
{
if (theEntry.Name != String.Empty)
{
fileName = Path.Combine(zipedFolder, theEntry.Name);
//判断文件路径是否是文件夹
if (fileName.EndsWith("/") || fileName.EndsWith("//"))
{
Directory.CreateDirectory(fileName);
continue;
}

streamWriter = File.Create(fileName);
int size = 2048;
var data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
finally
{
if (streamWriter != null)
{
streamWriter.Close();
streamWriter = null;
}
if (theEntry != null)
{
theEntry = null;
}
if (s != null)
{
s.Close();
s = null;
}
GC.Collect();
GC.Collect(1);
}
}

修改后代码如下:

public static void UnZip(string fileToUpZip, string zipedFolder, string password)
{
if (!File.Exists(fileToUpZip))
{
return;
}

if (!Directory.Exists(zipedFolder))
{
Directory.CreateDirectory(zipedFolder);
}

using (ZipInputStream zis = new ZipInputStream(File.Open(fileToUpZip, FileMode.Open)))
{
zis.Password = password;
ZipEntry ze = zis.GetNextEntry();
while (ze != null)
{
string fileName = Path.Combine(zipedFolder, ze.Name);
//文件夹
if (fileName.EndsWith("/") || fileName.EndsWith("//"))
{
if (!Directory.Exists(fileName))
{
Directory.CreateDirectory(fileName);
}
}
//文件
else
{
using (FileStream fs = File.Create(fileName))
{
int size = 2048;
var data = new byte[2048];
while (true)
{
size = zis.Read(data, 0, data.Length);
if (size > 0)
{
fs.Write(data, 0, size);
}
else
{
break;
}
}
}
}
ze = zis.GetNextEntry();
}
}
}

希望能帮助到遇见类似问题的同学

转载于:https://www.cnblogs.com/AntZhou/p/4474317.html

另一程序正在使用此文件,进程无法访问相关推荐

  1. [Kafka错误]-----kafka在window下出现另一个程序正在使用此文件,进程无法访问的错误

    目录 前言------对于只想解决这个问题的程序猿们,可以直接跳到"解决" 1.背景 2.问题 3.原因 4.解决(尾部有提供编译好的kafka包下载链接) 4.1kafka补丁版 ...

  2. 另一个程序正在使用此文件,进程无法访问

    原因是因为在操作这个文件的时候,这个文件已经被其他的进程占用了. 很可能是IO没关掉的原因.

  3. 另一个程序正在使用此文件 进程无法访问 iis

    大家遇到这个问题可能会很奇怪,实际上,iis提示的消息非常不明确 解决办法:这个问题是网站端口被其它网站占用了,你只需要改一个端口就行. 转载于:https://www.cnblogs.com/mao ...

  4. android studio 另一个程序正在使用此文件 进程无法访问

    不知道从哪个版本开始,as 总是时不时的提示下面的错误, 一种简单的解决方式: 切换到Terminal 窗口,直接输入gradlew -stop ,再build就可以正常运行了. gradlew -s ...

  5. iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”解决办法...

    iis提示"另一个程序正在使用此文件,进程无法访问.(异常来自HRESULT:0x80070020) "解决办法 今天在做服务器测试的时候意外发生IIS的默认网站启不来,尝试启动的 ...

  6. Android studio 另一个程序正在使用此文件,进程无法访问

    Execution failed for task ':doraemonkit:transformClassesAndResourcesWithPrepareIntermediateJarsForDe ...

  7. “另一个程序正在使用此文件,进程无法访问”的解决方法

    "另一个程序正在使用此文件,进程无法访问"的解决方法 参考文章: (1)"另一个程序正在使用此文件,进程无法访问"的解决方法 (2)https://www.cn ...

  8. pip install 另一个程序正在使用此文件,进程无法访问

    pip install 另一个程序正在使用此文件,进程无法访问 Running setup.py clean for SQLAlchemy Failed to build SQLAlchemy Ins ...

  9. 【错误记录】Flutter 混合开发报错 ( java.nio.file.FileSystemException: xxx/R.jar: 另一个程序正在使用此文件,进程无法访问。 )

    文章目录 一. 报错信息 二. 解决方案 一. 报错信息 Flutter 混合开发项目 : 在 Android 项目中 , 嵌入了 Flutter 页面 , 不小心运行了下 Flutter 项目 , ...

  10. VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,删除.lck文件夹和文件

    一.现象 VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,截图如下: 二.原因 因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果系统突然崩溃,虚拟机就来不急 ...

最新文章

  1. [OS][FS]查看ext3文件系统分区的superblock
  2. 转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)...
  3. java不带package和带package的编译方式
  4. 使用SAP Analytics Cloud显示新冠肺炎病毒感染人数的实时信息
  5. P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
  6. 汉军Hundre考勤数据库数据表分析总结
  7. java注册是什么意思_springcloud注册中心是什么意思?有什么作用?
  8. ACM做题过程中的一些小技巧
  9. 中国基因工程行业市场供需与战略研究报告
  10. lte基站可以做ntp server吗?_你手机信号强吗?学会这几招快速提升你的手机信号...
  11. C语言课程设计:学生管理系统
  12. nema0183 java解析_java解析nmea0183协议
  13. 多租户商城开发 多租户SaaS商城源码下载
  14. Laravel5利用163邮箱实现发送邮件mail功能
  15. clover懒人_懒人气球驱动的互联网毕竟可能不是一个愚蠢的想法
  16. 百度地图如何准确定位?注意surroundingPois
  17. 包含新房二手房租房功能的房产小程序开发方案
  18. 全国计算机等级考试二级 MySQL 数据库程序设计考试大纲(2022年版)
  19. Symbian技巧-安装sisx或sis后实现应用程序的自动启动
  20. DC 视频教程 第十课

热门文章

  1. Pytorch torch.sparse_coo_tensor()
  2. 设计电子计算机,电机设计电子计算机在电机设计计算中的应用(电机设计CAD)...
  3. 为什么美国程序员不用加班,而中国程序员就只能996?
  4. 逆向中常见寄存器及常用汇编指令
  5. 微型计算机2017年3月上,2017年3月份规模以上工业增加值增长7.6%
  6. SIGGRAPH中海洋的研究学习
  7. Python 处理POS标签
  8. “沙箱机制”是什么?
  9. 教你如何利用php.exe运行php文件
  10. 3A游戏的未来:实景三维技术解放人工建模