Patch level :10.0 setup

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :modifiche per l'aggiornamento via disco


git-svn-id: svn://10.65.10.50/trunk@15773 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-11-21 15:42:21 +00:00
parent fda95cd14e
commit eebf489dbf

View File

@ -94,6 +94,8 @@ private:
protected:
DECLARE_EVENT_TABLE()
//metodi principali dell'applicazione
void OnTimer(wxTimerEvent& e);
void DiskUpdate();
void InternetUpdate();
@ -101,24 +103,28 @@ protected:
void NormalSetup();
bool CampoRunning(const wxString& strAppName, const wxString& strMsg) const;
//metodi di interfaccia con Windows
bool CreateIcon(unsigned int csidl, const wxFileName& strExeFile, const wxString& strLinkName) const;
bool CreateAutostartMode(const int iSrvAutostartMode, const wxString& strPath);
void AssociateExtension(const wxFileName& strExeFile, const wxString strExt);
//metodi di interfaccia con il registry di Windows
wxString ReadRootRegistryKey(const wxString strKey) const;
wxString ReadLocalMachineRegistryKey(const wxString strKey) const;
bool WriteRootRegistryKey(const wxString strKey, const wxString& strValue) const;
bool WriteLocalMachineRegistryKey(const wxString strKey, const wxString& strValue) const;
//metodi di utility per i vari modi di aggiornamento
const wxString GetSourceDir(const wxString strDirName) const;
void EmptyOutDir(const wxString& strDir) const;
bool UnzipModule(const wxString& strPrgLocPath, const wxString& strSrc, const wxString& strModule) const;
bool CopyFilesAndDirs(const wxString& FilesListI, wxString strFileCurr, const bool bIni) const;
void UpdateSyInstallIni(const wxString strSourcePath, const wxString strDestPath) const;
int UpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const;
bool CopyFilesAndDirs(const wxString& FilesListI, wxString strFileCurr, const bool bIni) const;
void UpdateInstallIni(const wxString strSourcePath, const wxString strDestPath, const wxString& strModule) const;
bool HTTPGet(const wxString& strLocalPath, const wxString& strWebPath) const;
//metodi di aggiornamento non standard (client, da disco e via web con installazione moduli)
int ClientUpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const;
bool DiskUpdateModule(const wxString& strLocalPath, const wxString& strWebPath, const wxString strModule) const;
bool InternetUpdateModule(const wxString& strLocalPath, const wxString& strWebPath, const wxString strModule) const;
public:
@ -131,8 +137,9 @@ BEGIN_EVENT_TABLE(CampoSetup, wxApp)
EVT_TIMER(883, OnTimer)
END_EVENT_TABLE()
//metodi di lettura/scrittura registry di windows (fantastici!)
//----------------------------------------------------------------
// Metodi di lettura/scrittura registry di Windows (fantastici!)
//----------------------------------------------------------------
wxString CampoSetup::ReadRegistryKey(HKEY hBaseKey, const wxString strKey) const
{
wxString strValue;
@ -193,6 +200,9 @@ bool CampoSetup::WriteLocalMachineRegistryKey(const wxString strKey, const wxStr
return WriteRegistryKey(HKEY_LOCAL_MACHINE, strKey, strValue);
}
//----------------------------------
// Metodi di interfaccia con Windows
//----------------------------------
wxString CampoSetup::GetFolderPath(unsigned int uPathID) const
{
TCHAR szPath[MAX_PATH] = wxT("");
@ -318,8 +328,9 @@ bool CampoSetup::CreateIcon(unsigned int csidl, const wxFileName& strExeFile, co
}
//----------------------------------------------------------------
// Metodi di utility per i vari tipi di aggiornamento
//----------------------------------------------------------------
static int PatchCompare(const wxString& first, const wxString& second)
{
const wxFileName fn1(first);
@ -347,11 +358,11 @@ const wxString CampoSetup::GetSourceDir(const wxString strDirName) const
}
//metodo per aggiornare il modulo SY in install.ini
void CampoSetup::UpdateSyInstallIni(const wxString strSourcePath, const wxString strDestPath) const
void CampoSetup::UpdateInstallIni(const wxString strSourcePath, const wxString strDestPath, const wxString& strModule) const
{
for (int j = 0; j < 2; j++)
{
wxString strParagraph = "sy";
wxString strParagraph = strModule;
if (j > 0)
strParagraph << j;
CampoIniFile InstallIniSource(strSourcePath, strParagraph);
@ -393,7 +404,7 @@ bool CampoSetup::UnzipModule(const wxString& strPrgLocPath, const wxString& strS
//adesso che ha trovato quello sporco ultimo .ini prende versione e patch e le copia nell'install.ini..
//..nella dir dei programmi; lo fa paragrafo x paragrafo ([sy],[sy1]..)
//potrebbe sembrare assurdo un for, ma e' per futuri sottomoduli con numero > 1
UpdateSyInstallIni(strWrk, strPrgLocPath + "/install.ini");
UpdateInstallIni(strWrk, strPrgLocPath + "/install.ini", "sy");
}
return uFilesToCopy > 0;
}
@ -439,8 +450,30 @@ bool CampoSetup::CopyFilesAndDirs(const wxString& FilesListI, wxString strFileCu
return ok;
}
//metodo per accoppare tutti i files di una directory
void CampoSetup::EmptyOutDir(const wxString& strDir) const
{
wxArrayString asFilesList;
const size_t uFilesToKill = wxDir::GetAllFiles(strDir, &asFilesList, "*.*");
if (uFilesToKill > 0)
{
for (size_t i = 0; i < uFilesToKill; i++)
{
::wxRemoveFile(asFilesList[i]);
}
}
}
int CampoSetup::UpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const
//-----------------------------------------------------
// METODI BASSO LIVELLO PER AGGIORNAMENTI NON STANDARD
//-----------------------------------------------------
//----------------------------
// 1) AGGIORNAMENTO CLIENT
//----------------------------
//Aggiornatore client. Copia i files del programma da una directory remota su un server campo nella directory...
//...locale di campo
int CampoSetup::ClientUpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const
{
int nLocVer, nLocPatch, nRemVer, nRemPatch;
{
@ -548,6 +581,22 @@ int CampoSetup::UpdateModule(const wxString& strLocalPath, const wxString& strRe
return cmp;
}
//----------------------------
// 2) AGGIORNAMENTO DA DISCO
//----------------------------
//Aggiornatore da disco. Copia i files delle patch da una directory su disco in una directory di appoggio...
//...temporanea dove esegue lo scompattamento con destinazione la directory locale
bool CampoSetup::DiskUpdateModule(const wxString& strLocalPath, const wxString& strDiskPath, const wxString strModule) const
{
//puo' chiamare direttamente il metodo che scompatta tutte le patch del modulo a partire dal pacco iniziale...
//...fino all'ultima;il metodo le ordina gia' in modo crescente di numero d'ordine
return UnzipModule(strLocalPath, strDiskPath, strModule);
}
//-------------------------------
// 3) AGGIORNAMENTO DA INTERNET
//-------------------------------
bool CampoSetup::HTTPGet(const wxString& strLocalPath, const wxString& strWebPath) const
{
wxString strServer, strPath;
@ -572,20 +621,8 @@ bool CampoSetup::HTTPGet(const wxString& strLocalPath, const wxString& strWebPat
return false;
}
//metodo per accoppare tutti i files di una directory
void CampoSetup::EmptyOutDir(const wxString& strDir) const
{
wxArrayString asFilesList;
const size_t uFilesToKill = wxDir::GetAllFiles(strDir, &asFilesList, "*.*");
if (uFilesToKill > 0)
{
for (size_t i = 0; i < uFilesToKill; i++)
{
::wxRemoveFile(asFilesList[i]);
}
}
}
//Aggiornatore via web. Copia i files delle patch da una directory web remota in una directory di appoggio...
//...temporanea dove esegue lo scompattamento con destinazione la directory locale
bool CampoSetup::InternetUpdateModule(const wxString& strLocalPath, const wxString& strWebPath, const wxString strModule) const
{
bool ok = false;
@ -596,11 +633,12 @@ bool CampoSetup::InternetUpdateModule(const wxString& strLocalPath, const wxStri
nLocPatch = iniLocalInstall.GetInt("Patch");
}
//Svuota,elimina e ricrea una directory temporanea di appoggio ove mettere i files delle patch da scompattare
//E' necessaria questa operazione per non trovarsi ancora files di vecchie patch parcheggiati nella dir!
const wxString strTempDir = wxFileName::GetTempDir() + "/setup/";
EmptyOutDir(strTempDir); //deve svuotare la directory dai files per poterla eliminare
if (::wxRmdir(strTempDir))
//::wxMkdir(strTempDir);
CheckAndMakeDir(strTempDir, "setup");
EmptyOutDir(strTempDir); //deve svuotare la directory dai files per poterla eliminare!!!
if (::wxRmdir(strTempDir)) //elimina la dir adesso vuota
::wxMkDir(strTempDir); //la ricrea
const wxString strTempFile = strTempDir + "httpdir.txt";
if (HTTPGet(strTempFile, strWebPath))
@ -639,10 +677,52 @@ bool CampoSetup::InternetUpdateModule(const wxString& strLocalPath, const wxStri
return ok;
}
//-----------------------------------------------------
// METODI ALTO LIVELLO PER AGGIORNAMENTI NON STANDARD
//-----------------------------------------------------
//---------------------------------------------------------------
// 1) metodo per l'aggiornamento dei client di rete in automatico
//---------------------------------------------------------------
void CampoSetup::ClientUpdate()
{
wxFileName fn(m_strSetupPath, "install.ini");
fn.AppendDir("..");
fn.MakeAbsolute();
const wxString strLocalPath = fn.GetPath();
wxString strRemotePath;
{
CampoIniFile iniLocalInstall(fn.GetFullPath(), "Main");
strRemotePath = iniLocalInstall.Get("DiskPath");
}
ClientUpdateModule(strLocalPath, strRemotePath, "sy");
//------------------------------------------------------------------------------------
//metodo per l'aggiornamento via internet attraverso Manutenzione/Installazione moduli
//------------------------------------------------------------------------------------
wxSetWorkingDirectory(strLocalPath);
wxExecute("ba1 -6 /uADMIN");
}
//-----------------------------------------------------------------------------------------------
// 2) metodo per l'aggiornamento da disco attraverso il menu di Manutenzione/Installazione moduli
//-----------------------------------------------------------------------------------------------
void CampoSetup::DiskUpdate()
{
wxFileName fn(m_strSetupPath, "install.ini");
fn.AppendDir("..");
fn.MakeAbsolute();
const wxString strLocalPath = fn.GetPath();
wxString strRemotePath;
{
CampoIniFile iniLocalInstall(fn.GetFullPath(), "Main");
strRemotePath = iniLocalInstall.Get("DiskPath");
}
DiskUpdateModule(strLocalPath, strRemotePath, "sy");
wxSetWorkingDirectory(strLocalPath);
wxExecute("ba1 -6 /uADMIN");
}
//----------------------------------------------------------------------------------------
// 3) metodo per l'aggiornamento via internet attraverso Manutenzione/Installazione moduli
//----------------------------------------------------------------------------------------
void CampoSetup::InternetUpdate()
{
//install.ini locale dove setup.exe e' in esecuzione
@ -667,36 +747,9 @@ void CampoSetup::InternetUpdate()
wxExecute("ba1 -6 /uADMIN");
}
//-----------------------------------------------------------
//metodo per l'aggiornamento dei client di rete in automatico
//-----------------------------------------------------------
void CampoSetup::ClientUpdate()
{
wxFileName fn(m_strSetupPath, "install.ini");
fn.AppendDir("..");
fn.MakeAbsolute();
const wxString strLocalPath = fn.GetPath();
wxString strRemotePath;
{
CampoIniFile iniLocalInstall(fn.GetFullPath(), "Main");
strRemotePath = iniLocalInstall.Get("DiskPath");
}
UpdateModule(strLocalPath, strRemotePath, "sy");
wxSetWorkingDirectory(strLocalPath);
wxExecute("ba1 -6 /uADMIN");
}
//----------------------------------------------------------------------------------------
//metodo per l'aggiornamento da CD attraverso il menu di Manutenzione/Installazione moduli
//----------------------------------------------------------------------------------------
void CampoSetup::DiskUpdate()
{
}
//---------------------------------------------------------------
//metodo per tutte le installazioni e gli aggiornamenti in locale
//---------------------------------------------------------------
//--------------------------------------------------------------------------
//metodo per tutte le installazioni e gli aggiornamenti automatici in locale
//--------------------------------------------------------------------------
void CampoSetup::NormalSetup()
{
m_pWizard = new CampoWizard(m_pMainFrame);
@ -863,7 +916,7 @@ void CampoSetup::NormalSetup()
} //if (!strFileCurr.IsEmpty()..
} //for(size_t...
UpdateSyInstallIni(strSrc + "/install.ini", strPrgLocPath + "/install.ini");
UpdateInstallIni(strSrc + "/install.ini", strPrgLocPath + "/install.ini", "sy");
// 3) INSTALLAZIONE DATI DEMO
//---------------------------