From b71d32606cbbc76c032d3e28259e9ccca17d8288 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 18 Nov 2008 15:03:42 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento :aggiunta feature di ricerca di applicativi campo che girano come processi nel task manager (sono vecchie istanze di campo rimaste appese). Dedicato alle volpi siriane... git-svn-id: svn://10.65.10.50/trunk@17673 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- setup/Setup.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/setup/Setup.cpp b/setup/Setup.cpp index e2e712a99..e533bfff8 100755 --- a/setup/Setup.cpp +++ b/setup/Setup.cpp @@ -101,8 +101,9 @@ protected: void InternetUpdate(); void ClientUpdate(); void NormalSetup(); - bool CampoRunning(const wxString& strAppName, const wxString& strMsg) const; + bool SystemRunning(const wxString& strAppName, const wxString& strMsg) const; bool LurchRunning() const; + bool CampoRunning() const; //metodi di interfaccia con Windows bool CreateIcon(unsigned int csidl, const wxFileName& strExeFile, const wxString& strLinkName) const; @@ -1245,7 +1246,7 @@ void CampoSetup::NormalSetup() m_pWizard->Destroy(); } -bool CampoSetup::CampoRunning(const wxString& strAppName, const wxString& strMsg) const +bool CampoSetup::SystemRunning(const wxString& strAppName, const wxString& strMsg) const { wxSingleInstanceChecker sicProgram(strAppName); @@ -1263,11 +1264,11 @@ bool CampoSetup::CampoRunning(const wxString& strAppName, const wxString& strMsg bool CampoSetup::LurchRunning() const { //cerca Lurch che funziona come programma (esecuzione in modalita' avvio automatico)... - bool ok = CampoRunning("Lurch", wxEmptyString); + bool ok = SystemRunning("Lurch", wxEmptyString); if (!ok) { //...se non lo trova cerca il solo Authoriz sempre come programma... - ok = CampoRunning("Authorization", wxEmptyString); + ok = SystemRunning("Authorization", wxEmptyString); //se non trova nulla cerca Lurch come servizio... if (!ok) { @@ -1279,6 +1280,61 @@ bool CampoSetup::LurchRunning() const return ok; } + +bool CampoSetup::CampoRunning() const +{ + //ricerca di campo.aut per avere la lista dei moduli + //prima tenta con aggiornamento da disco... + wxString strInstallPath = "../install.ini"; + //...poi con aggiornamento da CD + if (!wxFileName::FileExists(strInstallPath)) + strInstallPath = "../../campo/install.ini"; + + //fa un giro sull'install.ini alla ricerca di tutti i moduli (sono i paragrafi lunghi 2) installati (se aggiornamento.. + //..da disco) o da installare (se sta installando da CD) + wxArrayString asModuli; + if (wxFileName::FileExists(strInstallPath)) + { + wxString strModulo; + long nIndex; + CampoIniFile iniInstall(strInstallPath, strModulo); + for (bool ok = iniInstall.GetFirstGroup(strModulo, nIndex); ok; ok = iniInstall.GetNextGroup(strModulo, nIndex)) + { + if (strModulo.Len() == 2) + asModuli.Add(strModulo); //aggiunge all'array tutti i moduli che trova in install.ini + } + } + else //non trova nessun install.ini (non dovrebbe mai accadere) e tenta i moduli più importanti + { + asModuli.Add("ba"); + asModuli.Add("cg"); + asModuli.Add("ve"); + asModuli.Add("mg"); + asModuli.Add("lv"); + } + + //scandisce l'array dei moduli alla ricerca di un eventuale programma di campo ancora running a sua insaputa + wxString strAppName; + for (size_t i = 0; i < asModuli.GetCount(); i++) + { + for (size_t j = 0; j <= 9; j++) + { + strAppName = asModuli[i]; + strAppName += ('0'+j); + wxSingleInstanceChecker sicProgram(strAppName); + + if (sicProgram.IsAnotherRunning()) + { + strAppName << " è in esecuzione! E' necessario terminarlo utilizzando il Task Manager di Windows"; + ErrorBox(strAppName); + return true; + } + + } + } + return false; //campo non sta andando +} + //metodo principale che sceglie la modalita' di lancio del programma void CampoSetup::OnTimer(wxTimerEvent& WXUNUSED(e)) { @@ -1288,16 +1344,27 @@ void CampoSetup::OnTimer(wxTimerEvent& WXUNUSED(e)) if (YesNoBox("Per poter aggiornare/installare il programma CAMPO deve temporaneamente essere disattivato il gestore delle licenze!\nPrima di disattivare il gestore delle licenze accertarsi che tutti gli utenti spengano il programma CAMPO!!\nProseguire con la disattivazione?")) const long lStop = StopLurch(); else + { + m_pMainFrame->Destroy(); return; + } } - if (CampoRunning("ba0", "Uscire dal programma CAMPO prima di procedere con l'aggiornamento/installazione!") || - CampoRunning("ba1", "Uscire dal programma di manutenzione di CAMPO\n prima di procedere con l'aggiornamento/installazione!")) + if (SystemRunning("ba0", "Uscire dal programma CAMPO prima di procedere con l'aggiornamento/installazione!") || + SystemRunning("ba1", "Uscire dal programma di manutenzione di CAMPO\n prima di procedere con l'aggiornamento/installazione!")) { m_pMainFrame->Destroy(); return; } + if (CampoRunning()) + { + ErrorBox("Un applicativo di Campo è ancora in esecuzione!\nL'installazione sarà interrotta immediatamente"); + m_pMainFrame->Destroy(); + return; + } + + wxFileName strPath(argv[0]); strPath.MakeAbsolute(); strPath.SetCwd();