Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :modifiche necessarie alla 10.0 per integrarsi con il nuovo setup


git-svn-id: svn://10.65.10.50/trunk@15916 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-12-19 11:41:00 +00:00
parent 9f78f19950
commit 75e4c8fde0
3 changed files with 233 additions and 163 deletions

@ -107,7 +107,7 @@ bool update_dninst(bool force)
//legge dal diskpath di install.ini la directory da cui aggiornarsi;se il dninst.zip di tale..
//..directory e' piu' nuovo di quello in locale -> lo copia in locale
const TFilename local_name = "dninst.zip";
const TFilename local_name = "setup/dninst.zip";
TConfig ini("install.ini", "Main");
TFilename remote_name = ini.get("DiskPath");
remote_name.add(local_name);
@ -124,7 +124,10 @@ bool update_dninst(bool force)
}
}
if (force)
{
make_dir(local_name.path());
fcopy(remote_name, local_name);
}
}
return true;
}
@ -139,7 +142,7 @@ bool update_assistance_year()
update_dninst(true);
const TFilename dninst = "dninst.zip";
const TFilename dninst = "setup/dninst.zip";
if (dninst.exist())
{
char dninst_key[8] = "";
@ -165,19 +168,18 @@ bool update_assistance_year()
dongle().set_year_assist(ass_year);
if (dongle().burn())
{
message_box(FR("Il contratto %d è stato attivato automaticamente"));
return true;
}
else
{
show_error(FR("Errore di scrittura sulla chiave di protezione"));
return false;
}
}
}
} //if(dongle().burn...
} //if(sn==serno...
} //while(!keys.eof()...
show_error(TR("Il numero di serie di questa postazione non è presente sul database"));
}
else
else //if(ass_year>dongle...
show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione"));
}
else

@ -27,11 +27,15 @@
#define C_ISPATCH 9
#define C_BASEPATCH 10
#ifdef _DEMO_
const char* const http_default_path = "/aga/demo/zip/";
#else
const char* const http_default_path = "/aga/program/zip/";
#endif
///////////////////////////////////////////////////////
// Metodi di utility
///////////////////////////////////////////////////////
HIDDEN const char* http_default_path()
{
//da compilare in base al producer!
return "www.aga.it/agarel100/";
}
HIDDEN int compare_version(const char* v1, int p1, const char* v2, int p2)
{
@ -60,6 +64,21 @@ HIDDEN word version2year(const char* v)
return atoi(ver);
}
static int compare_modules(const TObject** o1, const TObject** o2)
{
TToken_string& ts1 = *(TToken_string*)(*o1);
TToken_string& ts2 = *(TToken_string*)(*o2);
int res = 0;
for (int i = 2; i < 5 && res == 0; i++)
{
TString16 s1 = ts1.get(i);
const char* s2 = ts2.get(i);
res = s1.compare(s2);
}
return res;
}
bool is_internet_path(const TString& addr)
{
if (addr.compare("www.", 4, true) == 0)
@ -84,8 +103,7 @@ class TInstaller_mask : public TArray_sheet
static TInstaller_mask* _curr_mask;
int _station_type; //intero che definisce il tipo di installazione (1=std,2=server,3=client)
bool _installed; // Flag per verificare se almeno un modulo e' stato installato
bool _sys_installed; //Flag per controllare l'installazione del modulo di sistema SY
bool _modules_pending; //Flag per controllare se ci sono altri moduli da installare oltre a sy
bool _setup_run; //Flag che indica se e' stato lanciato il programma setup.exe
enum { NONE=0, NEW_MENU=1,
NEW_MENUPRG=2, NEW_INSTALLER=4, NEW_DLL=8, NEW_SYS=14,
@ -94,7 +112,6 @@ class TInstaller_mask : public TArray_sheet
protected: // TSheet
virtual bool on_key(KEY key);
static bool quit_handler(TMask_field& f, KEY k);
static bool tutti_handler(TMask_field& f, KEY k);
int get_module_number(const TString& module) const;
bool has_module(int modnumber) const;
@ -102,16 +119,17 @@ protected: // TSheet
void create_dirs(const char* path) const;
bool copy_tree(const char* src_study, const char* dst_study) const;
int test_type() const;
int test_station_type() const;
protected:
static bool path_handler(TMask_field& fld, KEY key);
static bool web_handler(TMask_field& fld, KEY key);
static bool sheet_notify(TSheet_field& s, int r, KEY k);
static bool install_handler(TMask_field& fld, KEY key);
static bool update_handler(TMask_field& f, KEY k);
bool add_module(TConfig& ini, const TString& module, bool patch, int pos=-1);
bool add_header(TConfig& ini, const TString& module, bool patch);
bool add_header(TConfig& ini, const TString& module);
int precheck_modules(bool only_newer=true);
void update_version();
@ -127,13 +145,12 @@ protected:
bool do_process(TToken_string& commands) const;
bool pre_process(TInstall_ini& ini, const char* module) const;
bool post_process(TInstall_ini& ini, const char* module) const;
bool get_internet_path(TFilename& ininame) const;
bool get_patches_path(TFilename& path) const;
void parse_internet_path(TString& http_server, TFilename& http_path) const;
public:
bool installed() const { return _installed;}
bool sys_installed() const { return _sys_installed;}
bool modules_pending() const { return _modules_pending && sys_installed();}
bool setup_run() const { return _setup_run; }
int station_type() const {return _station_type;}
bool autoload();
bool install(const TString& module, int patch);
@ -141,7 +158,7 @@ public:
void backup() const;
bool run_conversion() const
{ return installed() && !sys_installed() && (_reboot_program & NEW_TRR) != 0; }
{ return installed() && (_reboot_program & NEW_TRR) != 0; }
TInstaller_mask();
virtual ~TInstaller_mask();
@ -182,8 +199,8 @@ bool TInstaller_mask::add_module(TConfig& ini, const TString& module, bool patch
return true;
}
// Copia nello sheet i dati di un modulo prendendoli da un .ini
bool TInstaller_mask::add_header(TConfig& ini, const TString& module, bool patch)
// Copia nello sheet l'intestazione di un modulo prendendola da un .ini
bool TInstaller_mask::add_header(TConfig& ini, const TString& module)
{
ini.write_protect();
bool ok = ini.set_paragraph(module);
@ -198,21 +215,6 @@ bool TInstaller_mask::add_header(TConfig& ini, const TString& module, bool patch
return ok;
}
static int compare_modules(const TObject** o1, const TObject** o2)
{
TToken_string& ts1 = *(TToken_string*)(*o1);
TToken_string& ts2 = *(TToken_string*)(*o2);
int res = 0;
for (int i = 2; i < 5 && res == 0; i++)
{
TString16 s1 = ts1.get(i);
const char* s2 = ts2.get(i);
res = s1.compare(s2);
}
return res;
}
bool TInstaller_mask::has_module(int modnumber) const
{
//se sei un server hai tutti i moduli da installare
@ -224,7 +226,7 @@ bool TInstaller_mask::has_module(int modnumber) const
}
//che tipo di installazione e'?
int TInstaller_mask::test_type() const
int TInstaller_mask::test_station_type() const
{
TConfig ini(CONFIG_INSTALL, "Main");
int type = ini.get_int("Type");
@ -255,7 +257,7 @@ int TInstaller_mask::precheck_modules(bool only_newer)
int patchlevel,modnumber,currpatch;
bool check_enabled = true;
_modules_pending = false;
_setup_run = false; //inizializzazione del flag di controllo di lancio di setup.exe
TString_array& array = rows_array();
FOR_EACH_ARRAY_ROW(array, r, row)
@ -270,18 +272,14 @@ int TInstaller_mask::precheck_modules(bool only_newer)
if (modnumber >= 0 && has_module(modnumber) &&
!release.blank() &&
((release > currrelease) ||
(release == currrelease && (only_newer ? patchlevel>currpatch: patchlevel>=currpatch) ))
(release == currrelease && (only_newer ? patchlevel > currpatch : patchlevel >= currpatch) ))
)
{
// checca il modulo o la patch se ho installata la stessa versione
const bool chk = rigar.get_char(C_ISPATCH) != 'X' || release == currrelease;
if (check_enabled)
check(r, chk);
else
{
if (chk)
_modules_pending = true;
}
if (chk && only_newer && cod_module == "sy") //se viene checkato il modulo sy (sistema) deve togliere..
{ //..la possibilita' di installare altri moduli..
for (int i = 0; i < array.items(); i++)
@ -289,9 +287,9 @@ int TInstaller_mask::precheck_modules(bool only_newer)
disable(DLG_USER);
check_enabled = false; //..ed uscire
}
}
}
force_update(); // Indispensabile per vedere le righe aggiornate
} //if(modnumber>=0...
} //FOR_EACH_ARRAY_ROW...
force_update(); // Indispensabile per vedere le righe aggiornate sullo sheet
return items();
}
@ -345,21 +343,23 @@ bool TInstaller_mask::autoload()
TString http_server;
TFilename http_path;
TFilename path ;
TFilename path;
TFilename ininame;
const bool internet = get_internet_path(path);
//controla se si e' scelto un path di installazione internet o da disco
const bool internet = get_patches_path(path);
//se e' un aggiornamento via internet...
if (internet)
{
parse_internet_path(http_server,http_path);
parse_internet_path(http_server, http_path); //controlla il path internet scritto nel campo sulla maschera
make_dir(path);
make_dir(path); //crea la directory temporanaea di installazione dove depositare e scompattare gli zip
ininame = path;
ininame.add(TInstall_ini::default_name());
if (ininame.exist() && yesno_box(TR("Si desidera svuotare la cache dei files scaricati dal sito?")))
//se si ritrova dei vecchi .ini nella directory temporanea->pulisce la directory temporanea x evitare casini
if (ininame.exist()) //&& yesno_box(TR("Si desidera svuotare la cache dei files scaricati dal sito?"))) domanda del cazzo!
{
TString_array list;
TFilename name = path; name.add("*.*");
@ -370,16 +370,14 @@ bool TInstaller_mask::autoload()
}
if (!ininame.exist())
{
bool httpresult = http_isredirected_server(http_server, http_path);
TFilename remote_ini = http_path;
remote_ini << TInstall_ini::default_name();
{
TIndwin contacting(60,TR("Connessione al server HTTP..."),false,false);
httpresult=http_get(http_server, remote_ini, ininame);
TIndwin contacting(60,TR("Connessione al server HTTP..."), false, false);
http_get(http_server, remote_ini, ininame);
}
}
}
} //if(internet...
if (path.exist())
{
@ -411,7 +409,7 @@ bool TInstaller_mask::autoload()
if (module[0] == '_' || module.len() == 2)
{
if (module[0] == '_')
add_header(ini, module, false);
add_header(ini, module);
else
{
TFilename mod_ini = ininame.path();
@ -427,8 +425,8 @@ bool TInstaller_mask::autoload()
else
add_module(ini, module, false);
}
}
}
} //if(module[0]...
} //FOR_EACH_ARRAY_ROW(...
}
else
{
@ -608,9 +606,6 @@ bool TInstaller_mask::can_install(const char* module, TInstall_ini& ini)
#ifndef _DEMO_
if (year > dongle().year_assist())
{
/* Scommentare solo se ci si sente soli e si desidera ricevere telefonate in piu'
warning_box(FR("Per installare la versione %s del modulo '%s'\noccorre il contratto di assistenza per l'anno %s."),
(const char*)version, module, split_ass(year));*/
if (!update_assistance_year())
return false;
}
@ -715,8 +710,8 @@ bool TInstaller_mask::move_file(const TFilename& src, const TFilename& dst) cons
const bool is_zip = is_zip_file(src);
const long filesize = fsize(src) * (is_zip ? 4 : 1);
if (xvt_fsys_test_disk_free_space(dest, filesize) == 0)
return error_box(TR("Lo spazio sull'unita' di destinazione e' insufficiente!"));
if (xvt_fsys_test_disk_free_space(dest.path(), filesize) == 0)
return error_box(TR("Lo spazio disponibile e' insufficiente!"));
const bool write_ok = ::fcopy(src, dest);
if (write_ok && is_zip)
@ -875,7 +870,7 @@ KEY TInstaller_mask::askdisk(TString & path, TFilename & cmdline, int d, int dis
bool TInstaller_mask::install(const TString& module, int patchlevel)
{
bool cancelled=false;
bool cancelled = false;
bool ok = false;
TString msg; // stringa per i messaggi
TString16 lastrelease; // release che sto installando
@ -885,11 +880,11 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
TString http_server;
TFilename http_path;
const bool internet = get_internet_path(path);
const bool internet = get_patches_path(path);
if (internet)
parse_internet_path(http_server,http_path );
const bool is_a_patch=(patchlevel > 0);
const bool is_a_patch = (patchlevel > 0);
TFilename ininame = path;
ininame.add(module);
@ -1158,6 +1153,7 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
{
TInstall_ini ini;
ini.set("DiskPath", get(F_PATH));
ini.set("WebPath", get(F_WEB));
ini.set("Data", TDate(TODAY), module);
ini.update_prices(ininame);
}
@ -1178,34 +1174,46 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
}
bool TInstaller_mask::get_internet_path(TFilename &ininame) const
bool TInstaller_mask::get_patches_path(TFilename& path) const
{
ininame = get(F_PATH);
if (is_internet_path(ininame))
const TEdit_field& www = efield(F_WEB);
path = get(F_WEB);
if (www.active() && path.full() && is_internet_path(path))
{
ininame.tempdir();
ininame.add("www");
path.tempdir();
path.add("www");
return true;
}
else
path = get(F_PATH);
return false;
}
void TInstaller_mask::parse_internet_path(TString & http_server, TFilename &http_path) const
{
http_server = get(F_PATH);
http_server = get(F_WEB);
if (http_server.blank())
{
http_server = http_default_path();
((TMask*)this)->set(F_WEB, http_server);
}
if (http_server.compare("http://", 7, true) == 0)
http_server.ltrim(7);
const int slash = http_server.find('/');
const int slash = http_server.find('/');
if (slash > 0)
{
http_path = http_server.mid(slash);
if (http_path.right(1) != "/")
http_path << '/';
http_server.cut(slash);
}
else
http_path = http_default_path;
//aggiunge lo slash finale se l'utonto l'ha omesso
if (!http_path.ends_with("/"))
http_path << '/';
//e' un server redirezionato?
http_isredirected_server(http_server, http_path);
}
bool TInstaller_mask::install_patches(const TString& module, const TString& lastrelease, int lastpatch, bool only_newer)
@ -1213,7 +1221,7 @@ bool TInstaller_mask::install_patches(const TString& module, const TString& last
bool ok = true;
TString_array modules;
TFilename ininame;
get_internet_path(ininame);
get_patches_path(ininame);
ininame.add(module);
ininame << "????a.ini";
@ -1269,11 +1277,30 @@ bool TInstaller_mask::path_handler(TMask_field& fld, KEY key)
return ok;
}
bool TInstaller_mask::web_handler(TMask_field& fld, KEY key)
{
bool ok = true;
if (key == K_TAB && fld.focusdirty())
{
TFilename path = fld.get();
if (path.not_empty())
{
if (!path.ends_with("/"))
{
path << '/';
fld.set(path);
}
ok = ::is_internet_path(path);
if (!ok)
ok = fld.error_box(TR("Specificare un indirizzo valido"));
}
}
return ok;
}
void TInstaller_mask::install_selection()
{
TString_array& arr = rows_array();
_sys_installed = false;
int nModules = 0;
{
@ -1341,7 +1368,8 @@ void TInstaller_mask::install_selection()
TString256 msg;
msg.format(FR("Si desidera ritornare alla patch %s.%d del modulo '%s' ?\nAttenzione: non e' garantito il corretto\nfunzionamento di tutti i programmi!"), (const char*)newver, newpatch, (const char*)modulo);
ok = noyes_box(msg);
} }
}
} //if(ok&&is_patch...
if (ok)
{
@ -1358,48 +1386,98 @@ void TInstaller_mask::install_selection()
is_patch = false; // Quando la versione installata precede la patch base devo reinstallare il modulo!
}
}
TFilename path;
const bool internet = get_patches_path(path);
//richiesto aggiornamento da disco del modulo SY da manutenzione/installazione moduli!
if (modulo == "sy")
{
if (!internet)
{
bool file_copied = false;
//trova il path della directory setup che e' nell'area con gli zip del cd
TFilename disk_path = path;
disk_path.add("setup/");
TString_array ar;
const int items = list_files(disk_path, ar);
if (items > 0)
{
//copia la dir setup dal disco sovrascrivendo eventuali files gia' presenti
make_dir("setup");
TFilename local_file, remote_file;
FOR_EACH_ARRAY_ROW(ar, r, row)
{
local_file = row->mid(path.len() + 1);
remote_file = *row;
file_copied = fcopy(remote_file, local_file); //occhio alle maiuscole!!!!
}
}
//lancia setup in modalita' aggiornamento da disco
TExternal_app app("setup\\setup.exe -ud");
_setup_run = app.run(true) != 0;
}
//richiesto aggiornamento via web del modulo SY da manutenzione/installazione moduli!
else
{
bool file_copied = false;
//trova l'indirizzo web completo
TString http_server;
TFilename http_path;
parse_internet_path(http_server, http_path);
//copia la dir setup dalla remote dir sovrascrivendo eventuali files gia' presenti
http_path.add("setup/");
TString_array ar;
http_dir(http_server, http_path, ar);
if (ar.items() > 0)
{
make_dir("setup");
TFilename local_file, remote_file;
FOR_EACH_ARRAY_ROW(ar, r, row)
{
local_file = "setup";
local_file.add(*row);
remote_file = http_path;
remote_file.add(*row);
file_copied = http_get(http_server, remote_file, local_file); //occhio alle maiuscole!!!!
}
//lancia setup in modalita' aggiornamento web
TExternal_app app("setup\\setup.exe -uw");
_setup_run = app.run(true) != 0;
}
}
if (_setup_run) //se riesce a lanciare setup.exe...
{
//si suicida...Banzai!
uncheck(r);
send_key(K_SPACE, DLG_QUIT);
return;
}
}
//installa solo le patch del modulo...
if (is_patch)
{
ok = install_patches(modulo, oldver, oldpatch, false) ; // installa l'ultima patch
if (!ok)
message_box(TR("Impossibile installare le patch del modulo '%s'"),(const char *)modulo);
}
else
else //..installa anche il pacco del modulo
{
ok = install(modulo, 0); // installa il modulo
}
if (ok)
{
_installed = true; // Setta il flag di almeno un modulo installato
if (modulo == "sy") //se ha installato il modulo 'sy' esce
{
_sys_installed = true;
enable_row(r); //deve abilitare la riga di system senno' non la puo' uncheckare dopo
uncheck(-1); //uncheck di tutti i moduli
break;
}
uncheck(r); //finalmente unchecka i moduli installati
}
}
} //if(ok)...
else
uncheck(r); // se non ci sono patch o moduli -> uncheck
}
force_update(); //serve per togliere il check al modulo 'sy' quando viene installato
if (installed())
{
if (_sys_installed)
{
if (_modules_pending)
warning_box(TR("Modulo SY installato: gli altri moduli verranno installati successivamente"));
else
message_box(TR("Modulo SY installato: il programma si riavviera' automaticamente"));
} //FOR_EACH_ARRAY_ROW(arr...
send_key(K_SPACE, DLG_QUIT);
}
else
message_box(TR("Installazione conclusa"));
}
force_update(); //serve per togliere il check al modulo 'sy' quando viene installato
}
bool TInstaller_mask::install_handler(TMask_field& fld, KEY key)
@ -1421,22 +1499,6 @@ bool TInstaller_mask::install_handler(TMask_field& fld, KEY key)
}
bool TInstaller_mask::quit_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TInstaller_mask & m=(TInstaller_mask &) f.mask();
const bool check_on = _curr_mask->check_enabled();
_curr_mask->enable_check(true);
const bool some = _curr_mask->one_checked();
_curr_mask->enable_check(check_on);
if (some)
return noyes_box(TR("Alcuni moduli sono selezionati per l'installazione.\nConfermare l'uscita"));
}
return true;
}
bool TInstaller_mask::tutti_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
@ -1468,33 +1530,59 @@ bool TInstaller_mask::on_key(KEY key)
TInstaller_mask::TInstaller_mask()
: TArray_sheet(0, 0, 0, 0, TR("Installazione"),
HR("@1|Modulo@32|Cod.@3|Versione da\ninstallare@11|Liv.\nPatch@6|Data\nRilascio@10|Versione\nInstallata@10|Liv.\nPatch@6|Data\nInstallazione@13|Aggiornamento|Patch Base"),
0x18, 3)
0x18, 4)
{
_station_type = test_type();
_station_type = test_station_type();
_curr_mask = this;
_installed = false;
_sys_installed = false;
_reboot_program= NONE;
add_string(F_PATH, 0, PR("Installa da "), 1, 1, 80, "", 60);
add_string(F_CURPATH, 0, PR("Installa in "), 1, 2, 80, "D", 60);
//in base al tipo di installazione che rileva decide se puo' effettuare aggiornamenti via web (un client..
//..non puo' fare aggiornamenti da web!!!)
TRadio_field& rf = add_radio(F_TYPE, 0, "", 1, 0, 21, "0|1", "Installa da disco|Installa da internet");
*rf.message(0, true) = "DISABLE,207|ENABLE,201";
*rf.message(1, true) = "DISABLE,201|ENABLE,207";
add_string(F_PATH, 0, "", 22, 1, 256, "", 58);
add_string(F_WEB, 0, "", 22, 2, 256, "", 58);
set(F_TYPE, "0", 0x1);
//un client non puo' scegliere a caso da dove aggiornarsi!Solo dal suo server!
if (_station_type == 3)
rf.disable();
add_string(F_CURPATH, 0, PR("Installa in "), 1, 3, 80, "D", 58);
add_button(F_UPDATE, BR("Rileggi", 9), '\0');
add_button(F_INSTALL, BR("Installa", 9), '\0'); // NON mettere 'I'
set_handler(F_PATH, path_handler);
set_handler(F_WEB, web_handler);
set_handler(F_INSTALL, install_handler);
set_handler(F_UPDATE, update_handler);
set_handler(DLG_QUIT, quit_handler);
set_handler(DLG_USER, tutti_handler);
TInstall_ini ini;
TFilename path = ini.get("DiskPath");
set(F_PATH, path);
TFilename webpath = ini.get("WebPath");
const bool floppy = xvt_fsys_is_removable_drive(path) != 0;
if (path.not_empty() && !floppy && !is_internet_path(path))
set(F_PATH, path);
set(F_WEB, webpath);
//..fine costruzione maschera di installazione
//decide quale e' il percorso di installazione
//ha un cd o un disco di rete -> si aggiorna da questo...
if (path.exist())
autoload();
else //senno' cerca su internet se trova un path internet completo e la connessione funzionante
{
if (_station_type != 3 && webpath.full())
{
set(F_TYPE, "1", 0x1);
if (xvt_net_get_status() & 0x2) //la connessione web funziona?...
//if (yesno_box(TR("E' possibile l'aggiornamento via internet. Si desidera connettersi ora?")))
autoload(); //...quindi scarica l'elenco dei moduli da aggiornare!
}
}
DIRECTORY dir;
xvt_fsys_get_dir(&dir);
@ -1505,26 +1593,6 @@ TInstaller_mask::TInstaller_mask()
TInstaller_mask::~TInstaller_mask()
{
_curr_mask = NULL;
if (_reboot_program != NONE)
{
TString msg;
msg << TR("Sono stati aggiornati i seguenti elementi:") < '\n';
if (_reboot_program & NEW_MENU)
msg << TR("voci di menu;");
if (_reboot_program & NEW_MENUPRG)
msg << TR("navigatore dei menu;");
if (_reboot_program & NEW_INSTALLER)
msg << TR("installatore;");
if (_reboot_program & NEW_DLL)
msg << TR("librerie di base;");
if (_reboot_program & NEW_TRR)
msg << TR("tracciati record;");
msg.rtrim(1);
warning_box(msg);
}
}
///////////////////////////////////////////////////////////
@ -1569,7 +1637,6 @@ bool TInstaller::create()
if (_m->station_type() == 3)
{
_m->disable_check();
_m->disable(F_PATH);
_m->disable(F_UPDATE);
_m->disable(DLG_USER);
}
@ -1604,16 +1671,15 @@ void TInstaller::main_loop()
convert_archives();
}
const bool pending = _m->modules_pending();
//controlla se ha lanciato setup.exe prima di chiudersi; se non lo ha fatto -> e' a fine installazione..
//..normale (moduli non SY) e quindi lancia ba0.exe
const bool setup_launched = _m->setup_run();
delete _m; _m = NULL;
//le graffe servono per salvare il file campo.ini!! NON eliminarle
if (!setup_launched)
{
TConfig campo(CONFIG_INSTALL, "ba0close");
campo.set("ModulesPending", pending ? "1" : "0");
TExternal_app ba0("ba0.exe");
ba0.run(true, true, false); // run asynchronous and not iconized!
}
TExternal_app ba0close("ba0close.exe");
ba0close.run(true, true, false); // run asynchronous and not iconized!
}
int ba1700(int argc, char* argv[])

@ -3,3 +3,5 @@
#define F_INSTALL 203
#define F_SELECT 204
#define F_UPDATE 205
#define F_TYPE 206
#define F_WEB 207