您现在的位置是:首页 >

紧急自动转跳中每天自动更新 c#在线升级

火烧 2022-04-12 23:56:46 1050
c#在线升级   面介绍一种用We Service 制作的升级程序 通过We Service 升级程序就象读写本机文件一样简单 所以我就直接给出代码   We Service 部分代码 u i g S

c#在线升级  

  面介绍一种用Web Services制作的升级程序 通过Web Services 升级程序就象读写本机文件一样简单 所以我就直接给出代码

紧急自动转跳中每天自动更新 c#在线升级

  Web Services部分代码     using System;    using System Web;    using System Web Services;    using System Web Services Protocols;    using System IO;

  [WebService(Namespace = )]    [WebServiceBinding(ConformsTo = WsiProfiles BasicProfile _ )]    public class Service : System Web Services WebService    {        public Service()        {            //如果使用设计的组件 请取消注释以下行            //InitializeComponent();        }        /// <summary>        /// 需要升级文件的服务器路径        /// </summary>        private const string UpdateServerPath = d:\Debug ;        [WebMethod(Description = 返回服务器上程序的版本号 )]        public string ServerVer()        {            return ;        }        [WebMethod(Description = 返回需更新的文件 )]        public string[] NewFiles()        {            DirectoryInfo di = new DirectoryInfo(UpdateServerPath);            FileInfo[] fi = di GetFiles();            int intFiles= fi Length;            string[] myNewFiles = new string[intFiles];            int i = ;            foreach (FileInfo fiTemp in fi)            {                myNewFiles[i] = fiTemp Name;                System Diagnostics Debug WriteLine(fiTemp Name);                i++;            }

  return myNewFiles;        }        [WebMethod(Description = 返回需更新的文件的大小 )]        public int AllFileSize()        {            int filesize = ;            string[] files = Directory GetFiles(UpdateServerPath);            foreach (string file in files)            {                FileInfo myInfo = new FileInfo(file);                filesize += (int)myInfo Length / ;            }            return filesize;        }

  [WebMethod(Description = 返回给定文件的字节数组 )]        public byte[] GetNewFile(string requestFileName)        {            ///得到服务器端的一个文件            if (requestFileName != null || requestFileName != )                return getBinaryFile(UpdateServerPath + \ +requestFileName);            else                return null;        }

  /// <summary>        /// 返回所给文件路径的字节数组         /// </summary>        /// <param name= filename ></param>        /// <returns></returns>        private byte[] getBinaryFile(string filename)        {            if (File Exists(filename))            {                try                {                    //打开现有文件以进行读取                     FileStream s = File OpenRead(filename);                    return ConvertStreamToByteBuffer(s);                }                catch                {                    return new byte[ ];                }            }            else            {                return new byte[ ];            }        }        /// <summary>        /// 把给定的文件流转换为二进制字节数组         /// </summary>        /// <param name= theStream ></param>        /// <returns></returns>        private byte[] ConvertStreamToByteBuffer(System IO Stream theStream)        {            int b ;            System IO MemoryStream tempStream = new System IO MemoryStream();            while ((b = theStream ReadByte()) != )            {                tempStream WriteByte(((byte)b ));            }            return tempStream ToArray();        }

  }

  升级程序代码     using System;    using System Collections Generic;    using System ComponentModel;    using System Data;    using System Drawing;    using System Text;    using System Windows Forms;    using System Threading;    using System Xml;    using System IO;    using System Diagnostics;

  namespace AutoUpdate    {        public partial class frmAutoUpdate : Form        {            public frmAutoUpdate()            {                InitializeComponent();            }            /// <summary>            /// 当前版本            /// </summary>            private string m_strLocalVer;            /// <summary>            /// 服务器版本            /// </summary>            private string m_strServerVer;            /// <summary>            /// 需要更新的文件总数            /// </summary>            private int m_intFilesCount = ;            /// <summary>            /// 需要更新的文件大小            /// </summary>            private int m_AllFileSize;            /// <summary>            /// 正在下载的文件大小            /// </summary>            private int m_downingFileSize;            /// <summary>            /// 已经下载的文件大小            /// </summary>            private int m_downedFileSize;            /// <summary>            ///数组 需要更新的文件            /// </summary>            private string[] m_Files = null;            /// <summary>            /// 定义文件对象            /// </summary>            WebReference Service ws;            /// <summary>            /// 连接WebServeces并下载文件线程            /// </summary>            private Thread DownThread;            private void frmAutoUpdata_Load(object sender EventArgs e)            {                DownThread = new Thread(new ThreadStart(StartUpdate));                DownThread Start();            }            /// <summary>            /// 连接服务器 开始升级            /// </summary>            private void StartUpdate()            {                ws = new WebReference Service();                m_AllFileSize = ws AllFileSize();                try                {                    m_strLocalVer =Config Ver; //从配置文件中读取当前版本号                    m_strServerVer = ws ServerVer();//保存服务器版本号

  BeginInvoke(new System EventHandler(UpdateUI) lblLink);                    //当前版本低于服务器版本 开始更新                     if (double Parse(m_strLocalVer) < double Parse(m_strServerVer))                    {                        BeginInvoke(new System EventHandler(UpdateUI) lblDownLoad);                        m_Files = ws NewFiles();//需要更新的文件                        if (m_Files != null)                        {                            m_intFilesCount = m_Files Length;                            for (int i = ; i <= m_intFilesCount ; i++)                            {                                DownFile(m_Files[i]);                                Debug WriteLine(m_Files[i]);                            }                            // Config VER = strServerVer;//将版本号记录到配置文件中                        }                    }                    else                    {                        BeginInvoke(new EventHandler(OnShowMessage)                             你计算机上安装的已经是最新版本了 不需要升级 );                        return;                    }                }                catch (Exception ex)                {                    BeginInvoke(new EventHandler(OnShowMessage) ex Message);                    return;                }                //UI线程设置label属性                BeginInvoke(new System EventHandler(UpdateUI) lblStartExe);                //安装文件                MethodInvoker miSetup = new MethodInvoker(this StartSetup);                this BeginInvoke(miSetup);            }            /// <summary>            /// 下载文件            /// </summary>            /// <param name= fileName >文件名</param>            private void DownFile(string fileName)            {                //得到二进制文件字节数组                 byte[] bt = ws GetNewFile(fileName);                m_downingFileSize = bt Length / ;                string strPath = Application StartupPath + \Update\ + fileName;                if (File Exists(strPath))                {                    File Delete(strPath);                }                FileStream fs = new FileStream(strPath FileMode CreateNew);                fs Write(bt bt Length);                fs Close();            }            /// <summary>            /// 开始安装下载的文件            /// </summary>           private void StartSetup()            {                // 结束当前运行的主程序                Process[] pros = Process GetProcesses();                for (int i = ; i < pros Length; i++)                {                    if (pros[i] ProcessName == 教师考勤系统 )                    {                        pros[i] Kill();                    }                }                // 开始复制文件                for (int i = ; i <= m_intFilesCount ; i++)                {                    string sourceFileName = Application StartupPath + \Update\ + m_Files[i];                    string destFileName = Application StartupPath + \ + m_Files[i];                    if (File Exists(destFileName))                    {                        File Delete(destFileName);                    }                    File Copy(sourceFileName destFileName false);                }                // 升级完成 启动主程序                string StrExe = Application StartupPath + \教师考勤系统 exe ;

  if (File Exists(StrExe))                {                    System Diagnostics Process Start(StrExe);                }

  //关闭升级程序                Application Exit();            }

  #region 辅助方法 确保线程安全

  /// <summary>            /// Label上显示信息            /// </summary>            private void UpdateUI(object sender EventArgs e)            {                Label lbl = (Label)sender;                lbl ForeColor = SystemColors Desktop;                lblLocalVer Text = m_strLocalVer;                lblServerVer Text = m_strServerVer;            }

  /// <summary>            /// 显示对话框            /// </summary>            private void OnShowMessage(object sender EventArgs e)            {                MessageBox Show(this sender ToString() this Text                     MessageBoxButtons OK MessageBoxIcon Information);                Thread Sleep( );                this Close();            }            /// <summary>            /// 显示进度条            /// </summary>            private void InvokePrgBar()            {                if (prgBar Value < )                {                    prgBar Value = * (int)m_downedFileSize / m_AllFileSize;                    prgBar Update();                    System Diagnostics Debug WriteLine( prgBar Value:{ } + prgBar Value);                }            }            /// <summary>            /// 计算文件已下载的百分比            /// </summary>            private void subPrgBar()            {                m_downedFileSize += m_downingFileSize;                System Diagnostics Debug WriteLine( AllFileSize  + m_AllFileSize);                System Diagnostics Debug WriteLine( downingFileSize  + m_downingFileSize);                do                {                    Thread Sleep( );                    MethodInvoker mi = new MethodInvoker(this InvokePrgBar);                    this BeginInvoke(mi);                } while (m_AllFileSize <= m_downedFileSize);            }            #endregion

lishixinzhi/Article/program/net/201311/11273  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码