基于WebService的升级服务,部署IIS上;

独立自动更新EXE。

一、        服务部署:

CS客户端,轻量级自动更新服务_自动升级


CS客户端,轻量级自动更新服务_自动升级_02

记住这个地址,这个地址需要配置在自动更新客户端的下面。IP改为你的服务器IP。

http://localhost/AutoUpdateService/AutoUpdateService.asmx

二、CS端程序集成:

应用Program启动修改:

CS客户端,轻量级自动更新服务_CS_03

private static void AutoUpdate()
        {
            try
            {
                Process p = new Process();
                p.StartInfo = new ProcessStartInfo(Application.StartupPath + "\\AutoUpdater.exe");
                p.Start();
                p.WaitForExit();
            }
            catch(Exception ex)
            {

            }
        }

配置升级程序:

CS客户端,轻量级自动更新服务_CS_04

CS客户端,轻量级自动更新服务_客户端_05

三、升级方法

服务器下载目录:

CS客户端,轻量级自动更新服务_客户端_06

拷贝文件,到下载目录、重启客户端就可以了。

四、服务实现机制:

比较客户端文件与服务端指定路径(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;
        }