|
Questa volta voglio esporre una tecnica che ho sviluppato per ottenere delle
versioni personalizzate di Office 2003. In pratica spesso mi capita di dover
installare solo una minima parte di Office 2003 (ad esempio solo Word ed Excel)
così ho cominciato un pò a ragionare sul da farsi. Dunqueee ... durante il
processo di installazione, il setup di Office 2003 copia i file necessari (in
relazione al tipo di installazione che si vuole effettuare) nelle cartelle
destinazione. Se si riuscisse in qualche modo a rilevare tutti i file che
vengono copiati, allora potrei creare una versione del Cd di installazione che
consiste solo dei file necessari al tipo specifico di installazione che voglio
effettuare. Bene ... se diamo una occhiata al contenuto del cd di installazione
di Office 2003 troviamo tanti file .cab. Questi file .cab contengono i file che
verranno copiati durante la fase di installazione. La prima cosa da fare è
quella di liberarsi di questo formato .cab ed ottenere un cd con tutti i file in
chiaro distribuiti in cartelle sottocartelle. Questo obiettivo può essere
facilmente raggiunto creando il cosidetto "punto di installazione
amministrativo" ossia una cartella che contiene una versione non compressa
(senza tutti quei .cab) del cd di installazione di Office 2003. Come creare un
"Punto di installazione amministrativo"???? Semplicissimo: eseguire dalla linea
di comando "Setup.exe /a".
Si aprirà il processo di installazione di Office 2003
chiedendo una cartella di destinazione e quindi procedere (verrà chiesto il
seriale del prodotto, etc...). Alla fine, nella cartella di destinazione
specificata, avremo il Cd di Office 2003 tutto scompattato.
Il file più importante è PRO11.MSI: la linea di comando
"msiexec /i PRO11.MSI"
innesca il processo di installazione di Office 2003. Una caratteristica di tutti
i pacchetti .msi è che si può creare un log notevolemente dettagliato tramite il
parametro /l*v <filelog>. Se
eseguo l'installazione di Office 2003 con la seguente linea di comando
msiexec /i <precorso_completo>PRO11.msi /l*v c:\office2003.txt
allora alla fine dell' installazione avrò il file C:\Office2003.txt con
tantissimi dettagli sul processo di installazione. Apriamo tale file e cerchiamo
informazioni (tra le tante presenti) relative alla copia di file. Analizzando il
file ad un certo punto si può vedere una sequenza di informazioni relative alla
copia di file; in particolare il formato di trascrizione è il seguente:
Source for file '<nome file da copiare>' is uncompressed, at '<nome cartella
nel "Punto install. amministrativo">'.
Bene ... quindi a questo punto quello che dobbiamo fare è reperire tutte le
righe con il formato sopra descritto ed avremo quindi l' elenco di tutti i file
nel "punto di installazione amministrativo" che vengono copiati. Possiamo
utilizzare le espressioni regolari e per questo possiamo fare riferimento
all'articolo Espressioni regolari in Delphi dove
viene descritta una tecnica per utilizzare le espressioni regolari in Delphi.
Otteniamo quindi la seguente procedura:
procedure CopiaFileOffice(Punto_installazione_amministrativo,
Destinazione,
Log: string);
//Punto_installazione_amministrativo: cartella del "Punto di installazione amministrativo
//creato con "setup.exe /a"
//Destinazione: cartella dove si vuole che vengano copiati i file del cd di installazione
//di Office 2003 che ci interessano (risultato del parsing del file di log)
//Log: file creato eseguendo l'installazione di Office 2003 tramite la linea di comando
//"msiexec /i \PRO11.MSI /l*v "
var
i, j: integer;
FileStream: TFileStream;
InputStr, InputFile: string;
RegExp1: RegExp;
MatchCollection1: MatchCollection;
Match1: Match;
SubMatches1: ISubMatches;
Src, Dst: string;
inStr: string;
begin
//
InputFile := Log;
FileStream := TFileStream.Create(InputFile, fmOpenRead);
SetLength(InputStr, FileStream.Size);
FileStream.Read(InputStr[1], FileStream.Size);
InStr := WideCharToString(pWideChar(InputStr));
RegExp1 := CoRegExp.Create;
with RegExp1 do
begin
Pattern := 'Source for file\s' +
'''' + '(.*)' + '''' +
'\sis\suncompressed,\sat\s' +
'''' + StringReplace(Punto_installazione_amministrativo,
'\',
'\\',
[rfReplaceAll]) +
'(.*)' + '''' +
'.';
IgnoreCase := True;
Global := True;
MatchCollection1 := Execute(InStr) as MatchCollection;
end;
for i := 0 to MatchCollection1.Count - 1 do
begin
Match1 := MatchCollection1.Item[i] as Match;
SubMatches1 := Match1.SubMatches as SubMatches;
Src := Punto_installazione_amministrativo +
VarToStr(SubMatches1.Item[1]) +
VarToStr(SubMatches1.Item[0]);
Dst := Destinazione +
VarToStr(SubMatches1.Item[1]) +
VarToStr(SubMatches1.Item[0]);
Form1.Memo1.Lines.Add(Src + ' --> ' + Dst);
if not DirectoryExists(Destinazione + VarToStr(SubMatches1.Item[1])) then
ForceDirectories(Destinazione + VarToStr(SubMatches1.Item[1]));
CopyFile(pChar(Src), pChar(Dst), False);
end;
RegExp1 := nil;
FileStream.Free;
end;
In pratica eseguiamo l'installazione di Office 2003 con la
linea di comando
msiexec /i <percorso_completo>\PRO11.MSI /l*v c:\office2003.txt Nelle varie maschere del wizard di installazione selezioniamo
ciò che vogliamo installare (ad esempio solo Word ed Excel). Alla fine avremo il
file c:\office2003.txt. Eseguiamo a questo punto la procedura sopra ed otterremo
nella cartella destinazione un sottoinsieme del cd di Office 2003 comprensivo
dei soli file necessari per realizzare l'installazione che abbiamo appena
effettuato. L'unica cosa che rimane da fare è copiare nella cartella
destinazione anche il file PRO11.MSI.
A questo punto, visto che abbiamo ottenuto quello che
volevamo, andiamo oltre e vediamo di automatizzare il tutto (rendere
l'installazione "unattended"). Dobbiamo creare una "trasformata": partendo dalla
pagina di "Office 2003 Resource Kit"
http://office.microsoft.com/en-us/FX011511471033.aspx nella colonna di sinistra ci sono i 2 link ai downloads "Downloads":
http://www.microsoft.com/office/orkarchive/2003ddl.htm : downloads ralativi
alla versione in Inglese "Localized Downloads":
http://www.microsoft.com/office/orkarchive/2003locddl.htm : downloads
relativi alle versioni non in Inglese (categorizzati per lingua) Tra i downloads c'è quello relativo ad "Office 2003 Editions
Resource Kit" (ork.exe). Si tratta di un insieme di strumenti che passa sotto il
nome di "Office 2003 Resource Kit toolset". Bene scarichiamo ork.exe e
lanciamolo:optiamo per una installazione completa ed alla fine avremo un nuovo
gruppo di link all'interno del gruppo di link relativo ad Office 2003. Tra
questi lanciamo (facciamo riferimento alla versione in Inglese) "Custom
Installation wizard"
Nella seconda maschera viene chiesto di specificare il file .msi da cui si vuole
create la trasformata (file .mst). Bisogna selezionare il file PRO11.msi
contenuto nel "Punto di installazione amministrativo". Nella terza
maschera lasciare selezionata la voce che indica di creare un nuovo file .mst.
Nella quarta maschera viene chiesto di scegliere cartella di destinazione e nome
per il file .mst ("trasformata") che stiamo andando a creare: se ad esempio
vogliamo installare Word ed Excel e basta possiamo chiamarlo Word_Excel.mst. A
questo punto possiamo andare avanti (i vari passaggi sono tutti sufficientemente
autoesplicativi); quando ci verrà chiesto di definire i componenti da installare
andremo a selezionare i componenti nella stessa maniera in cui li abbiamo
selezionati precedentemente per eseguire l'installazione. Successivamente c'è la
possibilità di definire già la chiave di attivazione e di accettare le
condizioni di licenza: in questa maniera l'installazione potrà avvenire in
maniera totalemente unattended (senza bisogno di inserire il codice di
attivazione, etc...). Una volta arrivati alla fine, viene restituita la linea di
comando da utilizzare per effettuare l'installazione personalizzata utilizzando
la "trasformata" appena creata setup.exe TRANSFORMS=<percorso completo>\<trasformata.MST>
/qb- Bene, noi copiamo la "trasformata" (.mst) appena creata nella
cartella destinazione a fianco di PRO11.MSI e della sottocartella FILES: a
questo punto con la linea di comando
msiexec /i <percorso_completo>\PRO11.MSI
TRANSFORMS=<percorso_completo>\<trasformata.MST> /qb
possiamo eseguire una installazione totalmente automatizzata. Ok, a questo punto possiamo fare un passo ulteriore creando un
eseguibile autoestraente con WinRAR: selezioniamo il contenuto della cartella destinazione ->
pulsante destro ->
"aggiungi ad un archivio" ->
nella maschera iniziale: Metodo di compressione = "Migliore", "Crea un archivio
autoestraente", "Crea un archivio solido"
Tab "Avanzati" ->
click su "Modulo autoestraente" ->
Tab "Generale": nella casella "Esegui dopo l' estrazione": msiexec /i PRO11.msi
TRANSFORMS=trasformata.mst /qb
Tab "Modalità": check su "Estrai i file in una cartella temporanea" benee... a questo punto abbiamo un eseguibile che, una volta
lanciato, esegue in automatico l'installazione personalizzata di Office 2003 Sorgente
|