基于WebService的升级服务,部署IIS上;
独立自动更新EXE。
一、 服务部署:
记住这个地址,这个地址需要配置在自动更新客户端的下面。IP改为你的服务器IP。
http://localhost/AutoUpdateService/AutoUpdateService.asmx
二、CS端程序集成:
应用Program启动修改:
private static void AutoUpdate()
{
try
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo(Application.StartupPath + "\\AutoUpdater.exe");
p.Start();
p.WaitForExit();
}
catch(Exception ex)
{
}
}
配置升级程序:
三、升级方法:
服务器下载目录:
拷贝文件,到下载目录、重启客户端就可以了。
四、服务实现机制:
比较客户端文件与服务端指定路径(APP_CODE)的修改时间,不一样的进行下载;需要回滚的,可以备份原文件,再覆盖回来。
/// <summary>
/// 检测是否文件版本
/// </summary>
/// <param name="appCode">应用编码 APP_CODE</param>
/// <param name="Version">应用文件版本号,DLL为版本号,其他文件为最后修改时间</param>
/// <param name="FileName">文件名 相对路径</param>
/// <returns></returns>
[WebMethod]
public string[] VerfiyAppVersion(string appCode,string[] Version, string[] FileName)
{
var rt = AppFileVali.VerfiyAppVersion(appCode, Version, FileName);
return rt;
}
public class AppFileVali
{
public static string[] VerfiyAppVersion(string appCode, string[] Version, string[] FileName)
{
List<string> rt = new List<string>();
var app = GetAppInfo(appCode,"");
string baseAppPath = AppDomain.CurrentDomain.BaseDirectory + "AppUpload\\" + app.AppCode + "\\";
if(Directory.Exists(baseAppPath)==false)
{
Directory.CreateDirectory(baseAppPath);
}
//获取服务器目录文件列表
List<string> lstServer = new List<string>();
AutoUpdateUntil.AppFileVali.GetPathFiles(new DirectoryInfo(baseAppPath),"*.*",ref lstServer);
for(int i=0;i<lstServer.Count;i++)
{
lstServer[i] = lstServer[i].Replace(baseAppPath, "");
}
//比较客户端文件列表是否需要更新
for (int i = 0; i < FileName.Length; i++)
{
string serverFile = baseAppPath + FileName[i];
if(System.IO.File.Exists(serverFile)==false)
{
continue;
}
string strVersion = new FileInfo(serverFile).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
//FileVersionInfo fv = FileVersionInfo.GetVersionInfo(serverFile);
//string strVersion = fv.FileVersion;
//if (fv.FileVersion == null)
//{
// strVersion = new FileInfo(serverFile).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
//}
if (Version[i] != strVersion)
{
//if(FileName[i].EndsWith(".dll"))
//{
// rt.Add(FileName[i]);
//}
//else
//{
rt.Add(FileName[i] + "&" + strVersion);
//}
}
}
//客户端没有的为新增,新增的文件需要下载
var lstCilent = FileName.ToList();
foreach (string f in lstServer)
{
if(lstCilent.Contains(f)==false)
{
//if(f.EndsWith(".dll"))
//{
// rt.Add(f);
//}
//else
//{
string strVersion = new FileInfo(baseAppPath + f).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
rt.Add(f + "&" + strVersion);
//}
}
}
return rt.ToArray();
}
public static List<string> GetFiles(string path)
{
List<string> lstServer = new List<string>();
string basePath = AppDomain.CurrentDomain.BaseDirectory + path;
List<string> lstFile = new List<string>();
GetPathFiles(new DirectoryInfo(path), "*.*", ref lstFile);
foreach (string f in lstFile)
{
lstServer.Add(f.Replace(basePath, ""));
}
return lstServer;
}