Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

[MCAD.38] Migliorare il setup con qualche dettaglio in più

Nel post precedente abbiamo visto brevemente come creare un setup (semplice semplice) per fare il deploy della nostra applicazione. Con "semplice semplice" intendo dire che facciamo la copia dei files inclusi nel progetto sul PC dell'utente finale, senza fare nulla di particolare. Abbiamo visto che le dipendenze non sono più così importanti come nell'era DLL/OCX pre .NET. Gli assembly devono/possono essere copiati nella directory dell'applicazione stessa, oppure installati nella GAC se vogliamo che siano condivise fra più di una applicazione. Facciamo questa operazione aggiungendo banalmente i files nel nodo Application Folder.

Nel folder User's Desktop e in User's Programs Menu mettiamo gli shortcuts che vogliamo dare all'utente per lanciare l'applicazione. Nel primo caso sul Desktop, nel secondo caso nel menù Start di Windows.

Aggiungiamo qualche dettaglio...le Launch Conditions
Cos'è una "launch condition"? Come dice il nome stesso, si tratta di una condizione che il motore Windows Installer deve verificare per poter dare il suo consenso alla continuazione del setup. Se la condizione è rispettata, ok. Se non è rispettata, appare un messaggio di errore (che decidiamo noi) e il setup abortisce inesorabilmente.

Facciamo qualche esempio interessante. Lanciamo Visual Studio, apriamo la soluzione che abbiamo creato, andiamo sotto il menù View --> Editor --> Launch Condition. Appare una nuova finestra con una bella TreeView che comprende due nodi: Search Target Machine e Launch Conditions. Il primo nodo serve per impostare il criterio che deve essere soddisfatto (basandosi su una ricerca su un file, su una chiave di registro o su un componente MSI), il secondo per indicare cosa deve apparire nel caso in cui la condizione non fosse soddisfatta.

Premetto che le chiavi di registro che andrò ad indicare sono a solo scopo didattico. Non ho testato (purtroppo) se sono veramente valide per l'obiettivo che voglio raggiungere. Correggetemi!

Torniamo a noi.
Supponiamo di voler consentire l'installazione della nostra applicazione solo se abbiamo un SQL Server che gira su localhost, ovvero sul PC locale. Ho fatto un giro nel registry e ho trovato la seguente key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion

mi aspetto che questa chiave di registry esista solo sui PC che hanno un'istanza di SQL Server installata. Aggiungiamo la Launch Condition basandoci su questa key. Clicchiamo con il destro su Search Target Machine, poi su Add Registry Search ed assegniamo le seguenti properties:

(name) = SQL Server on local machine
(Property) = SQLSERVER
(RegKey) = SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion
(Root) = vsdrrHKLM
(Value) = CurrentVersion

Al momento del lancio di setup.exe, Windows Installer ricercherà questa chiave nel nostro registry e ci restituirà il valore di CurrentVersion. Provate a dare un'occhiata nel vostro registry. Io in CurrentVersion ho "8.00.194". Questa stringa viene salvata in SQLSERVER. A questo punto possiamo tranquillamente impostare la launch condition che vogliamo. Clicchiamo con il destro su Launch Conditions, poi su Add Launch Condition. Assegniamo le seguenti properties:

(Name) = SQL Server on local machine
(Condition) = SQLSERVER
(Message) = You don't have SQL Server on your local machine!

Fatto, tutto qua. Fate la build del progetto e provate a lanciare l'install dello stesso. Se quella chiave esiste, il setup prosegue, altrimenti viene abortito e viene mostrato il [Message]. Uao!!!
Avremmo potuto seguire la stessa logica con un File Search, ricercando "sqlservr.exe" sul PC dell'utente. Se esiste, bene, altrimenti terminiamo bruscamente il setup. Il problema in questo caso è che non sappiamo a priori la directory di installazione di SQL Server: possiamo impostare il Folder iniziale ed un Depth per indicare quante subdir vogliamo esplorare per ricercare il file. Potremmo iniziare la ricerca da [ProgramFiles], ma potrebbe essere comunque inaffidabile, perchè magari l'utente (per farsi male) ha installato SQL Server in F:\, oppure in C:\SQLSERVER2000, ed in tal caso rischieremmo di abortire senza un valido motivo. Forse è meglio il registry. Comunque sia, la logica è sempre la stessa.

Miglioriamo le Launch Conditions
Nell'esempio di prima abbiamo usato la proprietà SQLSERVER come booleana. Ovvero, la presenza/assenza di una determinata chiave di registro causa il proseguimento/interruzione del setup. Possiamo fare di meglio. SQLSERVER infatti non contiene true/false, ma contiene il valore contenuto nella chiave di registro indicata. Nel mio caso, appunto, "8.00.194". La condition può quindi assumere diverse forme:

SQLSERVER = "8.00.194"
Ok solo se la versione è esattamente quella che ho io, ovvero "8.00.194".

SQLSERVER > "8.00.193"
Ok solo se la versione è successiva a quella indicata

SQLSERVER <> "8.00.193"
Ok solo se la versione è diversa a quella indicata

E così via. In pratica, possiamo usare i normali operatori aritmetici per selezionare meglio quello che vogliamo. Forte! Chissà quali classi/funzioni/operatori possiamo utilizzare in questa piccola casellina?

Per ogni Launch Condition possiamo specificare anche un URL. In tal caso, la finestra di errore riporta un pulsante Yes e un No. Se clicchiamo Yes, si aprirà il browser predefinito all'URL che abbiamo indicato. Da notare che dovremmo modificare [Message] per far capire all'utente cosa succede se clicca Yes oppure No.

Ecco altri esempi tratti dal registry, tutti da verificare.

E' installato MSN Messenger? Quale versione?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSNMessenger\BgDlJobVer

E' installato IMHO?
HKEY_LOCAL_MACHINE\SOFTWARE\Elite Agency\Imho

Sono installate le DirectX? Quale versione?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX\Version

Non oso immaginare a quali esigenze potremmo far fronte leggendo il registro e decidendo automaticamente determinate cose in fase di installazione.

powered by IMHO 1.2

Print | posted on venerdì 23 settembre 2005 18:16 | Filed Under [ MCAD ]

Feedback

Gravatar

# [MCAD.39] Scrivere nel registro durante il nostro setup

26/09/2005 17:46 | Technology Experience
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET