基于FTP模式更新Winform程序
项目背景
公司开发了Winform程序装了几十台设备,手工更新非常麻烦,为了方便程序更新,自己开发了一个基于ftp的自动更新插件,可以设置版本,启动程序,更新时间,下面就是效果图。
项目使用
把Update.exe和UpdateConfig.xml文件放到你的程序目录然后根据你项目的需求编写xml配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configs>
<config name="version" value="1.02" />
<config name="ftpUrl" value="127.0.0.1/Update/DyePlanQuery/Current" />
<config name="exclude" value="WinFormsApp.exe.config,WinFormsApp.vshost.exe.config" />
<config name="runApp" value="WinFormsApp.exe" />
<config name="clearApp" value="WinFormsApp.exe" />
</configs>
vesrion是版本号,ftpUrl是你服务器FTP的路径,我是基于IIS搭建的FTP
服务器也有个UpdateConfig.xml,程序会根据客户端和服务器的xml比对来更新程序。
runApp配置之后可以再更新完之后自动启动应用程序,配置的是应用程序exe的名称
工程介绍
工程包含了ConfigHelper,FTPClient,Tools三个主要实现类
ConfigHelper主要功能是读取XML配置文件
FTPClient主要功能是和服务器FTP通讯
Tools包含了一些公共的方法
项目中使用
首先把update.exe引入工程
using BrickDogUpdate = Update;
在项目中添加定时器,设置自己想要更新的时间点,如果服务器有更新就会关闭当前程序启动更新程序,更新完毕会再次启动程序。
private void timer1_Tick(object sender, EventArgs e)
{
//更新 23:59:59 11:59:59
if (DateTime.Now.ToString("HH:mm:ss") == "23:59:59" || DateTime.Now.ToString("HH:mm:ss") == "11:59:59")
{
//加载配置文件
BrickDogUpdate.ConfigHelper.Load();
BrickDogUpdate.FTPClient fTPClient = new Update.FTPClient(BrickDogUpdate.ConfigHelper.config.ftpUrl);
//与FTP服务器比较版本号是否需要更新
if (fTPClient.IsNeedUpdate())
{
Start_Update_Thread();
Application.Exit();
}
}
}
void Start_Update_Thread()
{
System.Threading.Thread oThread = new System.Threading.Thread(new System.Threading.ThreadStart(Update_Thread));
oThread.Start();
}
void Update_Thread()
{
string updateUrl = System.IO.Directory.GetCurrentDirectory() + "\\Update.exe";
Process.Start(updateUrl);
}
其他
.vshost的进程会导致进程关闭不彻底,我们如下配置。
在调试页面,改成release,同时取消最后一项启用承载进程
在生成页面,将高级选项中的调试信息改成none可以取消生成pdb文件