Example #1
0
 private void btnStart_Click(object sender, EventArgs e)
 {
     try
     {
         mActionStatus  = enActionStatus.TestConnect;
         mTimer.Enabled = true;
         mThread        = new Thread(StartAction);
         mThread.Start();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Example #2
0
        private void StartAction()
        {
            try
            {
                #region -- 测试服务器连接情况 --
                mActionStatus = enActionStatus.TestConnect;
                //Thread.Sleep(200);
                LoadServerConfig();

                IFaxBusiness.IMyFaxBusiness webservice = null;
                bool bolIsConnected = false;
                if (this.txtServerAddress.Text != "")
                {
                    webservice     = RemotingObject.GetWebService();
                    bolIsConnected = webservice.ConnectServer();
                }

                if (bolIsConnected)//连接服务器成功
                {
                    mActionStatus = enActionStatus.Connected;

                    #region -- 获取服务器上的最新程序信息 --
                    DataTable dtServer = webservice.ReadClientFileInfo();
                    DataTable dtClient = GetLocalFile();//获取本地Client程序信息

                    //读取本地程序,与服务器程序进行对比,得出需求更新的程序清单
                    DataTable dtDiff;
                    bool      bolIsNeedUpdate;
                    CompareClientInfo(dtClient, dtServer, out dtDiff, out mNeedUpdateFileSize, out bolIsNeedUpdate);

                    DoData(0);
                    SetProgressMaxNum(100);

                    #endregion -- 获取服务器上的最新程序信息 --

                    if (bolIsNeedUpdate)
                    {
                        SetProgressVisible(true);
                        mActionStatus    = enActionStatus.UpdateDLL;//更新程序
                        mUpdatedFileSize = 0;

                        string strStartUpPath = Path.Combine(Application.StartupPath, "Client");
                        if (!Directory.Exists(strStartUpPath))
                        {
                            Directory.CreateDirectory(strStartUpPath);
                        }

                        //在Client下创建Ini文件

                        /*string strIniFile = Path.Combine(strStartUpPath, "WebLink.ini");
                         * if (!File.Exists(strIniFile))
                         * {
                         *  File.Create(strIniFile);
                         * }
                         *
                         * IniClass iniWebLink = new IniClass(strIniFile);
                         * iniWebLink.WriteValue("Link", "url", this.txtServerAddress.Text);
                         */
                        #region -- 分段下单程序 --
                        int iMaxLength = 1024 * 100;
                        foreach (DataRow dr in dtDiff.Rows)
                        {
                            string strFileName = dr["FileName"].ToString().TrimEnd();

                            if (strFileName.Equals("LBTSR.ini"))
                            {
                                continue;
                            }

                            DateTime dtFileTime = Convert.ToDateTime(dr["FileTime"]);
                            long     lFileSize  = Convert.ToInt64(dr["FileSize"]);

                            string strFullName = Path.Combine(strStartUpPath, strFileName);
                            mstrCurrentUpdateDLL = strFullName;//正在更新的程序

                            FileInfo fi = new FileInfo(strFullName);

                            if (!Directory.Exists(fi.DirectoryName))
                            {
                                Directory.CreateDirectory(fi.DirectoryName);
                            }

                            string strFullName_temp = strFullName + "_temp";
                            if (File.Exists(strFullName_temp))
                            {
                                File.Delete(strFullName_temp);
                            }

                            int iSplitCount = (int)Math.Ceiling(lFileSize / (float)iMaxLength);
                            //long lTotalSize = 0;
                            for (int i = 0; i < iSplitCount; i++)
                            {
                                int iPosition = i * iMaxLength;
                                if (lFileSize >= iPosition)
                                {
                                    byte[] bFile;
                                    webservice.ReadFileByte(strFileName, iPosition, iMaxLength, out bFile);
                                    mUpdatedFileSize += bFile.Length;//计算已更新的程序大小
                                    using (FileStream fileStream = new FileStream(strFullName_temp, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Write))
                                    {
                                        fileStream.Position = iPosition;
                                        fileStream.Write(bFile, 0, bFile.Length);

                                        fileStream.Flush();
                                        fileStream.Close();
                                    }

                                    int iPercent = (int)(mUpdatedFileSize / (float)mNeedUpdateFileSize * 100);
                                    DoData(iPercent);
                                }

                                if (i + 1 == iSplitCount)
                                {
                                    if (File.Exists(strFullName_temp))
                                    {
                                        if (File.Exists(strFullName))
                                        {
                                            File.Delete(strFullName);
                                        }
                                        File.Move(strFullName_temp, strFullName);
                                        if (File.Exists(strFullName))
                                        {
                                            FileInfo fiFile = new FileInfo(strFullName);
                                            fiFile.LastWriteTime = dtFileTime;
                                        }
                                    }
                                }
                            }
                        }

                        //将INi拷贝到Client目录下
                        string strIniPath = Path.Combine(Application.StartupPath, "WebLink.ini");
                        if (File.Exists(strIniPath))
                        {
                            string strClientIniPath = Path.Combine(Application.StartupPath, @"Client\WebLink.ini");
                            if (File.Exists(strClientIniPath))
                            {
                                File.Delete(strClientIniPath);
                            }
                            File.Copy(strIniPath, strClientIniPath);
                        }
                        DoData(100);
                        #endregion -- 分段下单程序 --
                    }

                    mActionStatus = enActionStatus.Success;
                }
                else
                {
                    mActionStatus = enActionStatus.Fail;
                }
                #endregion -- 测试服务器连接情况 --
            }
            catch (Exception ex)
            {
                mActionStatus = enActionStatus.Fail;
            }
        }