📄 ufrm_update.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 + -