⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufrm_update.cpp

📁 软件自动升级程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ufrm_Update.h"
#include "inifiles.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tfrm_Update *frm_Update;
//---------------------------------------------------------------------------
__fastcall Tfrm_Update::Tfrm_Update(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

//连接到数据库
bool  __fastcall Tfrm_Update::CheckIn(String strUserName,String strPassword,String strDBName,String strServerName)
{


    String strConnectionString = String("Provider=SQLOLEDB.1;")
                                 + "Persist Security Info=False;"
                                 + "User ID="         + strUserName   +";"
                                 + "Password='"       + strPassword   + "';"
                                 + "Initial Catalog=" + strDBName     + ";"
                                 + "Data Source="     + strServerName + ";";


    ADO->Connected = false;
    ADO->ConnectionString = strConnectionString;
    try
    {
        ADO->Connected = true;
    }
    catch(...)
    {
        return false;
    }
    ADO->Connected = false;

    ///如果AppServer尚未连接到数据库,则连接
    if( !ADO->Connected )
    {
        ADO->Connected = false;
        ADO->ConnectionString = strConnectionString;
        ADO->Connected = true;
    }

    ///返回登录结果
   return true;
}


//升级

//1 连接到服务器
//2 下载文件
//3 覆盖文件

void __fastcall Tfrm_Update::Button1Click(TObject *Sender)
{

   ProgressBar_Largh->Max = 100;
   ProgressBar_Largh->Position = 1;
   String strMsg;
   bool b =  CheckIn(m_strLOGINNAME,m_strLOGINPASS,m_strDatabaseName,m_strSQLServerName)  ;
   ProgressBar_Largh->Position = 4;
   if (b)
   {
     edt_Connect2DB->Enabled = true;

     TADOQuery* qr  = new TADOQuery(this);
     qr->Connection =  ADO;
     qr->Close();
     qr->SQL->Clear();
     String  strSql = "SELECT *  FROM T12_Update  order by  id ";
     qr->SQL->Add(strSql);
     qr->Open();
     ProgressBar_Largh->Position = 5;
     qr->First();
     edt_LoadFile->Enabled = true;
     while (!qr->Eof)
     {
        String strFileName  = qr->FieldByName("FileName")->AsString;
        lb_name ->Caption   = strFileName;
        String strFilePath  = ExtractFilePath(Application->ExeName) + "Update\\" ;

        if (!DirectoryExists(strFilePath))
        {
           try
           {
              ForceDirectories(strFilePath);
           }
           catch(...)
           {
              throw Exception("无法建立指定路径: " + strFilePath );
             
           }
         }

        strFilePath = strFilePath +strFileName;
        if (FileExists(strFilePath))
        {
           DeleteFile(strFilePath);
        }
        TBlobField* TBBS_Field = (TBlobField*)qr->FieldByName("EFile");
        int iBlogSize = TBBS_Field->BlobSize;//
        if(iBlogSize <= 0)
          return;
        try
        {
           TBBS_Field->SaveToFile(strFilePath);//文件大小
        }
        catch(...)
        {
         //
        }
        //load file
        qr->Next();
        ProgressBar_Largh->Position++;
     }

     //3、检测主程序是否正在运行
      lb_name ->Caption  = "检测主程序"  ;
     String strSPEEDSCANAPP_HWND_ClASS        = m_strSPEEDSCANAPP_HWND_ClASS  ;
     String strSPEEDSCANAPP_HWND_CAPTION      = m_strSPEEDSCANAPP_HWND_CAPTION;
     hwnd = FindWindow(strSPEEDSCANAPP_HWND_ClASS.c_str(),strSPEEDSCANAPP_HWND_CAPTION.c_str());
    ProgressBar_Largh->Position++;
   // if (hwnd!="NULL")
  //   {

      //  SendMessage
       // bool b =PostMessage(hwnd,WM_CLOSE,NULL,NULL);

  //   }
      int i = 0;
      while ((hwnd!=NULL)&&(i<3))
     {
         strMsg = "因升级需要,现在请关闭您正在运行的'公司内部事务管理系统'!";
         Application->MessageBox(strMsg.c_str(),"提示",MB_OK);
         Sleep(1000);
         hwnd = FindWindow(strSPEEDSCANAPP_HWND_ClASS.c_str(),strSPEEDSCANAPP_HWND_CAPTION.c_str());
         i++  ;
         ProgressBar_Largh->Position++;
      }

      if (hwnd!=NULL)
      {
          strMsg = "'公司内部事务管理系统'还在运行无法继续进行升级,升级程序终止!";
          Application->MessageBox(strMsg.c_str(),"提示",MB_OK);
          Application->Terminate();
      }

      lb_name ->Caption  = "正在升级文件";
      edt_Update->Enabled  = true;
      qr->First() ;
      while (!qr->Eof)
      {
           String strFileName  = qr->FieldByName("FileName")->AsString;
           lb_name ->Caption   = strFileName;
           String strFilePath  = ExtractFilePath(Application->ExeName) + "Update\\" +strFileName;
           String strDestFile   = ExtractFilePath(Application->ExeName) + strFileName;
           if (FileExists(strFilePath))
           {
              try
              {
                  CopyFile(strFilePath.c_str(),strDestFile .c_str(),false);
                  DeleteFile(strFilePath);
              }
               catch(...)
              {
               }
           }


           qr->Next() ;

           ProgressBar_Largh->Position++;

      }



      ProgressBar_Largh->Position = ProgressBar_Largh->Max ;
      strMsg = "恭喜您,系统升级成功,请运行主程序";



      Application->MessageBox(strMsg.c_str(),"提示",MB_OK);
      Application->Terminate();


      //4、复制文件到主程序中

      


   }
   else
   {
      strMsg = "无法连接到服务器!";
      Application->MessageBox(strMsg.c_str(),"提示",MB_OK);
      return;
   }        
}
/*
;用户名
SQL_SERVER =(local)
DB_NAME    =OA2007
LOGINNAME =HCDI
LOGINPASS =87598893
update    =
;主程序
SPEEDSCANAPP_HWND_ClASS   =Tfrm_Main
SPEEDSCANAPP_HWND_CAPTION =公司内部事务管理系统



*/
//---------------------------------------------------------------------------
void __fastcall Tfrm_Update::ReadIniFile()
{
    TIniFile *pIniFile    = new TIniFile( ExtractFilePath(Application->ExeName) + "Update.ini");
    m_strLOGINNAME        = pIniFile->ReadString("PATH", "LOGINNAME"   , "HCDI");
    m_strLOGINPASS        = pIniFile->ReadString("PATH", "LOGINPASS"   , "87598893");
    m_strSQLServerName    = pIniFile->ReadString("PATH", "SQL_SERVER" , "(local)");
    m_strDatabaseName     = pIniFile->ReadString("PATH", "DB_NAME"   , "DocData");
    m_strSPEEDSCANAPP_HWND_ClASS      = pIniFile->ReadString("PATH", "SPEEDSCANAPP_HWND_ClASS"  ,"Tfrm_Main");
    m_strSPEEDSCANAPP_HWND_CAPTION    = pIniFile->ReadString("PATH", "SPEEDSCANAPP_HWND_CAPTION"  ,"公司内部事务管理系统");
}
void __fastcall Tfrm_Update::FormCreate(TObject *Sender)
{
   ReadIniFile() ;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -