如何在调用更新函数时更新C# Console .NET程序?
简单实现C#控制台程序手动更新方案
核心思路
不用复杂框架,拆成两个小部分就行:主程序负责检查更新、触发更新流程;一个独立的迷你更新器负责替换主程序文件,适合学校项目快速搞定。
1. 准备两个项目
- 主控制台项目:写你的业务代码,再加一段更新检查的逻辑
- 更新器项目:单独的小型控制台程序,只做“复制新文件→替换旧文件→启动主程序”这几件事
2. 主程序的更新逻辑
在主程序里加个CheckAndUpdate()方法,逻辑很直白:
- 对比本地/共享目录里的最新版本号和当前程序版本
- 有新版本就询问用户,同意就启动更新器然后自己退出
- 示例代码:
using System; using System.Diagnostics; using System.Reflection; using System.IO; public static void CheckAndUpdate() { // 学校展示用本地共享文件夹就行,把版本号存成txt文件 string versionFilePath = @"\\班级共享盘\MyApp\version.txt"; string latestVersion = File.ReadAllText(versionFilePath).Trim(); string currentVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); if (latestVersion != currentVersion) { Console.WriteLine($"发现新版本:{latestVersion},当前版本:{currentVersion},是否更新?(Y/N)"); if (Console.ReadLine().Trim().ToUpper() == "Y") { // 启动更新器,传主程序路径和新版本exe的地址 string updaterPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Updater.exe"); string newAppPath = @"\\班级共享盘\MyApp\MainApp.exe"; Process.Start(updaterPath, $"\"{Assembly.GetExecutingAssembly().Location}\" \"{newAppPath}\""); Environment.Exit(0); } } }
3. 更新器的核心代码
更新器只需要做三件事:等主程序退出、替换文件、启动新程序,示例代码:
using System; using System.Diagnostics; using System.IO; using System.Threading; class Updater { static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("参数错误"); Console.ReadKey(); return; } string mainAppPath = args[0]; string newAppPath = args[1]; // 简单等2秒,确保主程序完全退出(学校场景足够用) Thread.Sleep(2000); try { // 覆盖旧的主程序文件 File.Copy(newAppPath, mainAppPath, true); Console.WriteLine("更新完成!3秒后启动程序..."); Thread.Sleep(3000); Process.Start(mainAppPath); } catch (Exception ex) { Console.WriteLine($"更新失败:{ex.Message}"); Console.ReadKey(); } } }
4. 部署和更新步骤
- 主程序的版本号在项目属性里设置:右键项目→属性→应用程序→程序集信息,填好版本号
- 每次更新主程序后,把新的
MainApp.exe放到共享目录,同时更新version.txt里的版本号 - 把更新器
Updater.exe和主程序放在同一目录就行
超简化单机版(不用共享盘)
如果是单机展示,直接在主程序目录建个update文件夹,把新版本的MainApp.exe和version.txt放进去,主程序检查这个文件夹里的内容就行,连共享盘都省了。
内容的提问来源于stack exchange,提问作者01maxzie
相关产品推荐
相关产品推荐

