Batch: migrazione di massa verso 7-Zip

| |

Richiesta: migrare un discreto numero di client da WinZip o WinRAR a 7-Zip, forse il miglior software d’archiviazione gratuito ed open-source attualmente disponibile sul mercato, anche in italiano! Sono soddisfatto della scelta del mio cliente, soprattutto perché sono stato io stesso a mettere la pulce nell’orecchio :P

# il punto di partenza

Tutti i test sono stati effettuati su macchine provviste di WinZip 8.1 (minimo) e WinRAR 3.80. La mia virtuale montava esattamente queste due versioni durante lo sviluppo. Secondo i documenti che ho consultato, i comandi che ho utilizzato dovrebbero andare bene anche con versioni precedenti e successive a quelle utilizzate.

# il comportamento

Trovato WinZip o WinRAR o magari entrambi, lo script deve poterli disinstallare entrambi senza l’intervento dell’utente che sta attualmente utilizzando la macchina. Il motto è sempre lo stesso: meno l’utente finale vede e fa, meglio è. Ciò vuol dire uso di installazioni e disinstallazioni “silent” come previsto ormai nel 99% dei pacchetti di installazione degli applicativi.

WinZip, WinRAR e 7-Zip non fanno eccezione. Ciascuno di questi ha un parametro che permette di gestirli in “silenzio” e lontani da occhi indiscreti. Nello specifico, ho fatto riferimento ad un paio di forum stranieri dove ho trovato esattamente ciò che cercavo:

  • Disinstallazione silent del WinZip
    appdeploy.com/messageboards/tm.asp?m=32728&mpage=1&key=&#32728
  • Disinstallazione silent del WinRAR
    msfn.org/board/lofiversion/index.php/t105462.html
  • Installazione silent di 7-Zip
    msfn.org/board/lofiversion/index.php/t47171.html
  • Associazioni ai file silent di 7-Zip
    msfn.org/board/lofiversion/index.php/t61105.html

# raccogliere, analizzare, sviluppare

Raccogliendo i vari codici e parametri in giro per forum si riescono ad ottenere fin troppo facilmente i controlli da fare e sviluppare. Ecco quindi l’analisi dei vari “paragrafi” di codice!

Prima di partire vi ricordo che avrete necessità di tenere il file di installazione di 7-Zip sulla macchina locale dove applicare lo script o –soluzione certamente migliore in ambito aziendale– su un server al quale possono far accesso i vostri client. Tutto viene deciso sin da subito dalla variabile “server” dichiarata ad inizio batch, ovviamente da modificare secondo le proprie esigenze:

set server=

Un paio di esempi? Nel caso in cui all’interno del disco C abbiate creato una cartella “inst” contenente il pacchetto di installazione (attualmente 7z465.exe) bisognerà dichiarare %systemdir%\inst, proprio in questo modo:

set server=%systemdir%\inst

così facendo lo script richiamerà il setup con %systemdir%\inst\7z465.exe (quasi sempre corrisponderà a C:\inst\7z465.exe). Lo stesso vale per il server, cambia semplicemente il modo di richiamarlo:

set server=\\serverpippo\installazioni\sw\....

Sta alla vostra attuale situazione decidere che valore prenderà quella variabile. Non inserite il nome del pacchetto exe, il codice lo prevede già durante l’esecuzione.

Kill dei servizi WinZip e disinstallazione

WinZip e la sua odiosa icona nella tray fanno comparsa subito dopo l’installazione. E’ l’unico applicativo che necessita di un bel “TaskKill” via DOS che permette di terminare il QuickPick:

echo Termino eventuali servizi aperti da WinZip ...
echo;
taskkill /IM WZQKPICK.EXE
echo Fatto!

:WINZIP8
echo;
if not exist %programfiles%\WinZip\WINZIP32.EXE goto WINRAR
echo Disintallazione di WinZip in corso ...
echo;
%programfiles%\WinZip\WINZIP32.EXE /uninstallx

echo Fatto!

Il primo controllo chiede allo script di assicurarsi che WinZip esista sulla macchina (if not exist … goto WINRAR), in caso contrario si salterà al controllo ed eventuale disinstallazione di WinRAR. Inutile dire che se WinZip viene trovato il codice proseguirà fino alla stringa “… WINZIP32.EXE /uninstallx” che lancia una disinstallazione completa e silente sulla macchina.

Controllo ed eventuale disinstallazione WinRAR

WinRAR è certamente meno invasivo del collega. Contrariamente a WinZip possiede un file di disinstallazione e l’attributo per il silent è molto più standard, basta un semplice “/s“:

if not exist %programfiles%\WinRAR\WinRAR.exe goto 7ZIP
echo Disinstallazione di WinRAR in corso ...
echo;
%programfiles%\WinRAR\Uninstall.exe /s
echo Fatto!

La prima stringa di controllo si assicura semplicemente che WinRAR esista, altrimenti salterà immediatamente all’installazione di 7-Zip!

Installare 7-Zip, alfin si giunge al risultato!

Installare 7-Zip e associarlo ai tipi di file più utilizzati e conosciuti è il passaggio finale della migrazione. La parte più corposa, manco a dirlo, riguarda proprio l’associazione dei file, e qui bisogna davvero ringraziare il forum di MSFN per aver già preparato uno script da integrare nel proprio batch per ottenere il risultato voluto.

if exist %programfiles%\7-Zip\7zFM.exe goto FINEPROCESSO
echo Installazione 7-Zip in corso ...
echo;
start /wait %server%\7z465.exe /S /D="%programfiles%\7-Zip\"

Il controllo è d’obbligo. Nel caso in cui la macchina possieda già 7-Zip si può tranquillamente concludere l’intervento “portando forzatamente a termine lo script“. In caso contrario ecco che la stringa di start provvederà a lanciare il setup dandogli in pasto la variabile silent (anche stavolta /s) e la destinazione già decisa per il programma. La variabile d’ambiente “%programfiles%” corrisponde a C:\Programmi nel 99% dei casi, ma è sempre meglio utilizzare indirizzi relativi piuttosto che gli assoluti no? ;)

Lo script delle associazioni è invece un costrutto “for” che per ciascuna estensione “desiderata” applicherà una nuova associazione nel registro di sistema, associando infine l’icona standard decisa da 7-Zip:

SETLOCAL
SET SC=HKLM\SOFTWARE\Classes
SET Extn=001 7z arj bz2 cab chm cpio deb gz iso lzh nsis rar rpm tar z zip
FOR %%j IN (%Extn%) DO (
REG ADD %SC%\.%%j /VE /D "7-Zip.%%j" /F
REG ADD %SC%\7-Zip.%%j /VE /D "7z Archive" /F
REG ADD %SC%\7-Zip.%%j\DefaultIcon /VE /D "\"%PROGRAMFILES%\7-Zip\Formats\%%j.dll\"" /F
REG ADD %SC%\7-Zip.%%j\shell\open\command /VE /D "\"%PROGRAMFILES%\7-Zip\7zFM.exe\" \"%%1\"" /F
)
REG ADD %SC%\7-Zip.001\DefaultIcon /VE /D "\"%PROGRAMFILES%\7-Zip\Formats\split.dll\"" /F
ENDLOCAL

Così facendo il risultato “è servito“, in meno di due minuti sulla macchina esisterà solo ed esclusivamente 7-Zip come gestore di pacchetti Zip/Rar e chi più ne ha più ne metta. Inutile dire che alle associazioni già presenti nello script potete aggiungerne altre previste –ovviamente– dall’applicativo.

Modifiche dell’ultima ora

(ultimo aggiornamento: 26.03.09 14.55)

Visto che la procedura di associazione file sembrava non funzionare altrettanto bene con le icone, Stefano ha leggermente modificato il codice includendo la risoluzione (grazie :P) che ora corrisponde al seguente:

SETLOCAL
SET SC=HKLM\SOFTWARE\Classes
SET Extn=001 7z arj bz2 cab chm cpio deb gz iso lzh nsis rar rpm tar z zip
FOR %%j IN (%Extn%) DO (
REG ADD %SC%\.%%j /VE /D "7-Zip.%%j" /F
REG ADD %SC%\7-Zip.%%j /VE /D "7z Archive" /F
REG ADD %SC%\7-Zip.%%j\shell\open\command /VE /D "\"%PROGRAMFILES%\7-Zip\7zFM.exe\" \"%%1\"" /F
)
REG ADD %SC%\7-Zip.001\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\Formats\split.dll" /F
REG ADD %SC%\7-Zip.7z\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,0" /F
REG ADD %SC%\7-Zip.arj\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,4" /F
REG ADD %SC%\7-Zip.bz2\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,2" /F
REG ADD %SC%\7-Zip.cab\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,7" /F
REG ADD %SC%\7-Zip.chm\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\Formats\chm.dll" /F
REG ADD %SC%\7-Zip.cpio\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,12" /F
REG ADD %SC%\7-Zip.deb\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,11" /F
REG ADD %SC%\7-Zip.gz\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,14" /F
REG ADD %SC%\7-Zip.iso\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,8" /F
REG ADD %SC%\7-Zip.lzh\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,6" /F
REG ADD %SC%\7-Zip.nsis\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\Formats\nsis.dll" /F
REG ADD %SC%\7-Zip.rar\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,3" /F
REG ADD %SC%\7-Zip.rpm\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,10" /F
REG ADD %SC%\7-Zip.tar\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,13" /F
REG ADD %SC%\7-Zip.z\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,5" /F
REG ADD %SC%\7-Zip.zip\DefaultIcon /VE /D "%PROGRAMFILES%\7-Zip\7z.dll,1" /F
ENDLOCAL

Ho chiaramente aggiornato lo script batch che ora include la nuova parte di codice e rilasciato il nuovo source su Dev:

dev.gxware.org/?13

# codice & download

Il codice sorgente del batch è disponibile gratuitamente ed interamente nell’area dev, come sempre:

dev.gxware.org/?12

dev.gxware.org/?13

mentre un batch già pronto è nel repository GxWare.org:

downloads.gxware.org/index.php?dir=articoli/7zip_migrazione/&file=7zip-install.bat

#riutilizzare il codice per un update

Nessuno vi vieta di modificare il nome del setup in futuro. Quando 7-Zip raggiungerà la versione 4.66, nel paragrafo dedicato alla sua installazione si potrà semplicemente cambiare il nome dell’eseguibile ricordandosi di andare poi a mettere il file di setup nella cartella dichiarata. Non è chiaramente stato sviluppato per aggiornare l’applicativo, ma con una “aggiustatina” qua e là potrebbe fare anche questo, magari ve lo spiego in un prossimo articolo eh? :)

# in conclusione

Un lavoro di 5 o più minuti portato a termine in due senza necessità di disconnettere l’utente attualmente connesso al sistema, basterà lanciare il batch come amministratore per risolvere il problema! :)

Proposte? Critiche? L’area commenti è a vostra disposizione!

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

4 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments