Posts
83
Comments
165
Trackbacks
11
November 2006 Blog Posts
Scorrendo il registro...con C++

Siamo quasi alla fine, il progetto di setup è quasi pronto (fase di test  ) e quindi ho un po' di tempo per postare un po' di codice.
Come dicevo nel mio ultimo post se si dovesse essere nella condizione di dover disinstallare una vecchia versione della propria applicazione o comunque una generica applicazione esiste una chiave nel registro di sistema che espone il comando, da eseguire dal prompt, che lancia l'uninstall dell'applicazione.

Giusto per gradire ecco il codice in C++ che esegue questa operazione

HKEY uninstallKey NULL;

LONG lResult RegOpenKeyEx(
        
HKEY_LOCAL_MACHINE,
        
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",  
        
NULL,
        
KEY_ENUMERATE_SUB_KEYS,
        
&uninstallKey);

if (lResult != ERROR_SUCCESS)
    
return;
    
DWORD appKeyIndex 0;
TCHAR appKeyName[256];
DWORD appKeyLength sizeof(appKeyName);

while (lResult RegEnumKeyEx(
                
uninstallKey,
                
appKeyIndex++,
                
appKeyName,
                
&appKeyLength,
                
NULL,
                
NULL,
                
NULL,
                
NULL)) != ERROR_NO_MORE_ITEMS)
{
    
appKeyLength sizeof(appKeyName);

    
if (lResult != ERROR_SUCCESS)
        
continue;

    
HKEY appKey NULL;

    
lResult RegOpenKeyEx(
            
uninstallKey,
            
appKeyName,  
            
NULL,
            
KEY_QUERY_VALUE,
            
&appKey);

    
if (lResult == ERROR_SUCCESS)
    {
        
TCHAR displayNameValue[256];
        
DWORD displayNameValueLength sizeof(displayNameValue);

        
lResult =
            
RegQueryValueEx(
                
appKey,
                
_T("DisplayName"),
                
NULL,
                
NULL,
                (
LPBYTE)displayNameValue,
                
&displayNameValueLength);

        
if (lResult == ERROR_SUCCESS
            && APPLICATION_NAME 
== displayNameValue)
        {
            
TCHAR cmd[256];
            
DWORD cmdValueLength sizeof(displayNameValue);

            
lResult RegQueryValueEx(
                
appKey,
                
_T("UninstallString"),
                
NULL,
                
NULL,
                (
LPBYTE)cmd,
                
&cmdValueLength);    
            
if (lResult == ERROR_SUCCESS)
                
ExecCmd(cmd,true);
        
}

        
try                RegCloseKey(appKey);}
        
catch (...)        {}
    }
}

try                RegCloseKey(uninstallKey); }
catch (...)        { }


Anche se il c++ è il mio primo amore, e il primo amore non si scorda mai, ho come l'impressione che utilizzando le classi del framework sia molto più semplice...proverò!!!

...sovvertiamo le gerarchie...
powered by IMHO 1.3

posted @ Monday, November 27, 2006 3:36 PM | Feedback (2)
Disinstallare...prima di installare!

Oramai è un incubo, me lo sogno di notte! Cosa?!? Ma il progetto di setup che sto *cercando* di creare...
Non sto ad elencarvi i requisiti e i prerequisiti che deve soddisfare/installare perchè dovrei scrivere un manuale!

Non lasciate (ve ne prego) commenti del tipo "...ma utilizza ClickOnce...", "...ma è così facile con Visual Studio..."! Abbiate pietà
Vi dico solo che l'intero progetto di setup è scritto in C++ ed è, per non so quale ragione, tutto a riga di comando (ovviamente su richiesta del cliente)...ebbene sì, a volte si torna indietro invece di andare avanti !!!

Comunque tra le altre (mille ) cose che l'installazione deve fare è quella di verificare eventuali versioni precedenti dell'applicazione, disinstallarle senza la minima interazione con l'utente (?) per poter poi installare la versione "definitiva".

Soluzione:
Nel registro di sistema, sotto la chiave HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Uninstall c'è l'elenco di tutte le applicazioni presenti sulla macchina che prevedono la possibilità di essere disinstallate.
Trovata (e questo è un primo problema , "cliccare per credere") la "cartella/chiave" relativa alla nostra applicazione, tra le chiavi del registro disponibili, dovrebbe esserci la chiave UninstallString.
Il valore di questa chiave non è altro che il comando da lanciare dal prompt per disinstallare l'applicazione.

...sovvertiamo le gerarchie...
powered by IMHO 1.3

posted @ Friday, November 24, 2006 12:50 PM | Feedback (2)
Management (WMI) Extensions per Visual Studio

Scrivendo la firma dinamica per Happy Sign richiesta da Igor, utilizzando WMI per reperire alcune informazioni relative alla configurazione del proprio pc, mi sono imbattuto in questo componente.
Non l'ho nemmeno scaricato, ma da quanto riporta la documentazione online dovrebbe aggiungere due nuovi nodi allo strumento Server Explorer di Visual Studio, per la gestione delle classi WMI e dei suoi eventi...

La segnalazione era dovuta , anche se il componente è sicuramente datato  (le "extensions" sono per Visual Studio 2003, non so se è compatibile con VS 2005 o se ne esiste una versione adatta)!
Tempo per testarlo non ne ho (non sono ai livelli di Lorenzo, ma poco ci manca), quindi se qualcun'altro l'ha già provato o ha modo di provarlo...insomma fatemi sapere!

...sovvertiamo le gerarchie...
powered by IMHO 1.3
posted @ Monday, November 20, 2006 3:11 PM | Feedback (0)
Red, Green, Refactor...

Non avete capito di cosa sto parlando? Vuol dire che non avete seguito il suggerimento del mio post precedente , o peggio ancora non seguite il mio blog , ma questo, allora, è un altro discorso.

Comunque per tornare a noi, nel titolo ho semplicemente riassunto quello che, in prima battuta, mi è sembrato essere lo scheletro su cui si basa TDD. Per meglio comprendere quello che voglio dire riporto (virgolettando) uno stralcio dell'articolo da cui ha preso inizio la mia curiosità verso questa nuova metodologia di sviluppo:

"...

  1. Write a test.
  2. Run the test. It fails to compile because the code you're trying to test doesn't even exist yet! (This is the same thing as failing.) 
  3. Write a bare-bones stub to make the test compile.
  4. Run the test. It should fail. (If it doesn't, then the test wasn't very good.) 
  5. Implement the code to make the test pass.
  6. Run the test. It should pass. (If it doesn't, back up one step and try again.)
  7. Start over with a new test!

..."

Ancora non si è capito a cosa mi riferisco con 'Red" e "Green"? Non credo proprio...

...sovvertiamo le gerarchie...
powered by IMHO 1.3
posted @ Friday, November 17, 2006 4:53 PM | Feedback (2)
Test Driven Development...iniziamo?

Su suggerimento di Emanuele (thanks) sto iniziando a valutare la possiblità di utilizzare questa metodologia (TDD) nello sviluppo delle mie applicazioni. La scelta di questa "inversione di tendenza" (proprio di inversione si tratta ), secondo il mio punto di vista, va pesantemente ponderata anche perchè sono abbastanza legato al famoso detto "...chi lascia la strada vecchia per la nuova...".
Partendo dal presupposto, però, che un nuovo punto di vista non fa mai male (anzi credo che sia proprio attraverso il confronto con persone/metodologie differenti che nascono le cose migliori) mi sono deciso almeno a "documentarmi"...

Lo scopo di questo post è semplicemente fare da tramite e segnalarvi lo starting point che mi è stato suggerito...Test Drive Development in .NET
L'articolo è assolutamente introduttivo, ma presenta le fondamenta sulle quali si basa questa metodologia di sviluppo. E' secondo me un buonissimo punto di partenza...dato che ha rovesciato completamente la mia visione delle cose è ancora "instabile" nella mia mente ed è ancora in fase di assimilazione .
Ogni commento a riguardo sarebbe, quindi, assolutamente poco opportuno anche perchè dettato semplicemente da sensazioni...l'unico modo per poter essere più consistente nelle mie affermazioni, come al solito, sarà quello di applicare questa metodologia ad un caso reale. Solo dopo potrò essere più preciso a riguardo.

Che altro dire...ai prossimi post l'ardua sentenza!!!

...sovvertiamo le gerarchie...
powered by IMHO 1.3

posted @ Wednesday, November 15, 2006 9:43 AM | Feedback (6)
Metodologia SUPER-Agile???

Premetto che non è il mio modo di lavorare e credo che non utilizzerò mai questo tool se non sotto tortura
...ma in certe situazioni super-critiche, ci vogliono delle metodologie super-agili...

...sovvertiamo le gerarchie...
powered by IMHO 1.3
posted @ Friday, November 10, 2006 1:09 PM | Feedback (5)
Cos'è Grasshopper?

Grasshopper è un plugin per Visual Studio .Net, che permette di sviluppare, debuggare e "deployare" WebApps e WebServices su qualsiasi piattaforma Java...
...almeno da quello che mi è sembrato di intuire a prima (s)vista!

Da verificare!!!
...comunque il link è questo...
Qualunque feedback a riguardo è assolutamente gradito

...sovvertiamo le gerarchie...
powered by IMHO 1.3
posted @ Thursday, November 9, 2006 4:53 PM | Feedback (0)
Le estensioni per rendere sicuro FireFox

Sul blog del centro CERIAS dell'Università di Purdue sono elencate le 11 estensioni che rendono FireFox un browser veramente sicuro.
Riporto i link alle varie extensions...per una breve descrizione rimando alla fonte di questa informazione:

...sovvertiamo le gerarchie...
powered by IMHO 1.3
posted @ Wednesday, November 8, 2006 10:29 AM | Feedback (2)