Posts
48
Comments
142
Trackbacks
26
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 on lunedì 27 novembre 2006 15.36 Print
Comments
Gravatar
# re: Scorrendo il registro...con C++
Alessio Marziali
28/11/2006 13.17
  
Se ti può essere utile ci persi la testa tempo fa.
Ciao!

http://blogs.ugidotnet.org/jc/archive/2006/07/01/43900.aspx
Gravatar
# re: Scorrendo il registro...con C++
Alessandro Melchiori
28/11/2006 15.41
  
Grazie mille per il suggerimento...
...è una mia impressione o la pagina linkata è tutta sformattata?

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 3 and 8 and type the answer here: