コード例 #1
0
        private void btnUpdateRequiedVersion_Click(object sender, EventArgs e)
        {
            try
            {
                if (m_VEHeader.Count <= 0)
                {
                    return;
                }
                var header = m_VEHeader[0];
                if (!header.IsVersionNull() && header.Version.Trim() == Application.ProductVersion.Trim())
                {
                    MessageBox.Show("版本号相同不需更換!");
                    return;
                }
                string ver = Application.ProductVersion.Trim();
#if UseSQLServer
                string fullDest = Path.GetFullPath(Application.ExecutablePath).ToLower();
                byte[] zipped   = null;
                byte[] md5      = null;

                if (MyFunction.CompressFileToBuf(fullDest, out zipped, out md5))
                {
                    var programAdapter = new VoucherExpense.DamaiDataSetTableAdapters.ProgramTableAdapter();
                    var cmd            = new System.Data.SqlClient.SqlCommand("DELETE FROM [dbo].[Program] WHERE 1=1");
                    cmd.Connection = programAdapter.Connection;
                    programAdapter.Connection.Open();
                    cmd.ExecuteNonQuery();
                    var table      = new VoucherExpense.DamaiDataSet.ProgramDataTable();
                    var programRow = table.NewProgramRow();
                    programRow.ID             = Guid.NewGuid();
                    programRow.ProgramVersion = ver;
                    programRow.UpdatedTime    = DateTime.Now;
                    programRow.ZippedImage    = zipped;
                    programRow.MD5            = md5;
                    table.AddProgramRow(programRow);
                    labelRequiredVersion.Text = ver + " 正在上傳";
                    Application.DoEvents();
                    programAdapter.Update(table);
                    programAdapter.Connection.Dispose();
                }
#endif
                header.Version = ver;
                VEHeaderAdapter.Update(m_VEHeader);
                labelRequiredVersion.Text = "要求版本 " + header.Version;
            }
            catch (Exception ex)
            {
                MessageBox.Show("錯誤:" + ex.Message);
            }
        }
コード例 #2
0
        bool DoUpdate()
        {
            this.Cursor = Cursors.WaitCursor;
            string newExeName = "Manage.exe";

            string fullDest       = Path.GetFullPath(Application.ExecutablePath).ToLower();
            string OldDesktop     = "Manage_exe.old";
            string filePath       = Path.GetDirectoryName(Application.ExecutablePath).ToLower();
            string destPath       = filePath + "\\" + newExeName;
            var    programAdapter = new VoucherExpense.DamaiDataSetTableAdapters.ProgramTableAdapter();
            var    table          = new VoucherExpense.DamaiDataSet.ProgramDataTable();
            var    row            = table.NewProgramRow();

            byte[] data;
            try
            {
                programAdapter.Fill(table);
                if (table.Count <= 0)
                {
                    MessageBox.Show("新版程式不存在! 無法更版");
                    return(false);
                }
                row = table[table.Count - 1];   // 取最後一個
                if (row.IsZippedImageNull())
                {
                    MessageBox.Show("新版程式長度為0 ! 無法更版");
                    return(false);
                }
                byte[] md5 = null;
                data = MyFunction.Decompress(row.ZippedImage);
                md5  = Encoder.GetMD5(data);
                for (int i = 0; i < 15; i++)
                {
                    if (md5[i] != row.MD5[i])
                    {
                        MessageBox.Show("MD5值不符,不進行更版!");
                        return(false);
                    }
                }
                File.Delete(OldDesktop);
                File.Delete(filePath + "\\" + OldDesktop);                               // 將現在執行檔改名成 OldDesk
                File.Move(Application.ExecutablePath, filePath + "\\" + OldDesktop);
            }
            catch (Exception ex)
            {
                MessageBox.Show("原程式備份失敗! 原因:" + ex.Message);
                return(false);
            }
            try
            {
                if (File.Exists(destPath))
                {
                    File.Delete(destPath);
                }
                MyFunction.WriteBufferToFile(data, destPath, data.Length);
                this.Cursor = Cursors.Arrow;
                MessageBox.Show("更版完成! 請執行<" + newExeName + ">,舊版備份為<" + OldDesktop + ">");
                return(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("新版烤貝或舊版更名過程失敗,原因:" + ex.Message + " 請手動烤貝或更名!新版名<" + newExeName + ">");
                return(false);
            }
        }