- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
.NETC#程序自动更新组件
本来博主想偷懒使用AutoUpdater.NET组件,但由于博主项目有些特殊性和它的功能过于多,于是博主自己实现一个轻量级独立自动更新组件,可稍作修改集成到大家自己项目中,比如:WPF/Winform/Windows服务。大致思路:发现更新后,从网络上下载更新包并进行解压,同时在WinForms应用程序中显示下载和解压进度条,并重启程序。以提供更好的用户体验。
1.系统架构概览
自动化软件更新系统主要包括以下几个核心部分:
版本检查:定期或在启动时检查服务器上的最新版本。
下载更新:如果发现新版本,则从服务器下载更新包。
解压缩与安装:解压下载的更新包,替换旧文件。
重启应用:更新完毕后,重启应用以加载新版本。
组件实现细节
独立更新程序逻辑:
1.创建WinForms应用程序
首先,创建一个新的WinForms应用程序,用来承载独立的自动更新程序,界面就简单两个组件:添加一个ProgressBar和一个TextBox控件,用于显示进度和信息提示。
2.主窗体加载事件
我们在主窗体的Load事件中完成以下步骤:
解析命令行参数。
关闭当前运行的程序。
下载更新包并显示下载进度。
解压更新包并显示解压进度。
启动解压后的新版本程序。
下面是主窗体Form1_Load事件处理程序的代码:
privateasyncvoidForm1_Load(objectsender,EventArgse)
//读取和解析命令行参数
varargs=Environment.GetCommandLineArgs();
if(!ParseArguments(args,outstringdownloadUrl,outstringprogramToLaunch,outstringcurrentProgram))
_=MessageBox.Show(请提供有效的下载地址和启动程序名称的参数。
Application.Exit();
return;
//关闭当前运行的程序
Process[]processes=Process.GetProcessesByName(currentProgram);
foreach(Processprocessinprocesses)
process.Kill();
process.WAItForExit();
//开始下载和解压过程
stringdownloadPath=Path.Combine(Path.GetTempPath(),Path.GetFileName(downloadUrl));
progressBar.Value=0;
textBoxInformation.Text=下载中...
awaitDownloadFileAsync(downloadUrl,downloadPath);
progressBar.Value=0;
textBoxInformation.Text=解压中...
awaitTask.Run(()=ExtractZipFile(downloadPath,AppDomain.CurrentDomain.BaseDirectory));
textBoxInformation.Text=完成
//启动解压后的程序
stringprogramPath=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,programToLaunch);
if(File.Exists(programPath))
_=Process.Start(programPath);
Application.Exit();
else
_=MessageBox.Show($无法找到程序:{programPath}
}
3.解析命令行参数
我们需要从命令行接收下载地址、启动程序名称和当前运行程序的名称。以下是解析命令行参数的代码:
privateboolParseArguments(string[]args,outstringdownloadUrl,outstringprogramToLaunch,outstringcurrentProgram)
downloadUrl=
文档评论(0)