C#使用Autoupdater.NET更新时卡在解压阶段无法覆盖原文件问题
Autoupdater.NET 更新路径错误及卡解压问题解决方案
问题根因
你代码中对AutoUpdater.InstallationPath的赋值逻辑错误,直接导致了两个异常现象:
- 当程序部署在
C:\Systeminventory目录运行时:Environment.CurrentDirectory值为C:\Systeminventory,其父目录为C:\根目录,更新程序尝试向C盘根目录写入解压文件,但你配置了AutoUpdater.RunUpdateAsAdmin = false,更新进程无C盘根目录写入权限,因此卡在解压步骤无响应。 - 当程序部署在
C:\Systeminventory\folder目录运行时:Environment.CurrentDirectory值为C:\Systeminventory\folder,其父目录为C:\Systeminventory,因此更新文件会被解压到该目录,不符合你的预期。
修复方案
调整InstallationPath的赋值逻辑,直接指定为当前程序运行目录即可,同时根据目录权限调整管理员运行配置,修改后的调用代码如下:
try { AutoUpdater.Start(updatePath); AutoUpdater.ShowSkipButton = false; AutoUpdater.ShowRemindLaterButton = false; AutoUpdater.Mandatory = true; // 程序部署在C盘目录下建议开启管理员更新权限,避免写入被拦截 AutoUpdater.RunUpdateAsAdmin = true; // 直接将安装路径设为当前程序运行目录,无需取父目录 AutoUpdater.InstallationPath = Environment.CurrentDirectory; } catch (Exception) { MessageBox.Show("更新过程出现问题"); }
额外排查点
如果修改后仍出现卡解压的情况,可按以下顺序验证:
- 检查更新包zip结构:确认zip包根目录就是程序文件,没有嵌套额外的外层文件夹,避免解压后路径层级错误
- 校验更新包完整性:对比配置文件中的MD5值和实际下载的压缩包MD5是否一致
- 排查进程残留:确认主程序的所有子进程也已完全退出,避免文件被占用导致无法覆盖
内容的提问来源于stack exchange,提问作者TheQuestionmark
相关产品推荐
相关产品推荐

