I Permessi del Registro

mercoledì 13 giugno 2007 - 08.56

roccomita Profilo | Newbie

Salve,
sono giorni che mi cimento per riuscire ad eliminare una
chiave del registro.
l'eccezione dice che :
- Impossibile scrivere nella chiave del Registro di sistema.

contenuto dello stack :
in System.ThrowHelper.ThrowUnauthorizedAccessException(ExceptionResource resource)
in Microsoft.Win32.RegistryKey.DeleteSubKeyTree(String subkey)
in SharpCleaner.Registro.EliminaChiavi(RegistryKey chiave, String filtro) in C:\Documents....



Di seguito riporto le istruzione del metodo che mi da problemi...
//Elimina chiavi di registro in base al filtro
public void EliminaChiavi(RegistryKey chiave, string filtro)
{
try
{
RegistryPermission rp = new RegistryPermission(
RegistryPermissionAccess.AllAccess, chiave.Name + "\\" + filtro);

//dopo questa istruzione scatta l'eccezione
chiave.DeleteSubKeyTree(filtro);
}
catch (Exception ex) { }
}


Dov'è l'errore in questo metodo?

munissor Profilo | Senior Member

RegistryPermission fa parte della CAS, quindi verifica se il tuo assembly è configurato per l'accesso completo alla tua chiave. Il fatto è che poi dopo la CAS devi superare anche il controllo del sistema operativo (le ACL) quindi non ti lascia cancellare la chiave.

Quello che cercavi di fare è modificare i permessi immagino, questo lo ottieni con RegistrySecurity (solo v2.0), non con RegistryPermission.

Cmq dato il fatto che non puoi eliminare la chiave dubito che tu abbia permessi sufficienti per modificarne i permessi. Parla con il tuo amministratore di sistema se necessiti dei permessi.

Ciao!

roccomita Profilo | Newbie

ciao
innanzitutto premetto che sn amministratore del pc, e che
la chiave in questione la riesco a eliminare manualmente ma non da codice.

ho modificato il metodo xò non funziona, continua a darmi la
stessa eccezione! come potrei fare?


//Elimina chiavi di registro in base al filtro
public void EliminaChiavi(RegistryKey chiave, string filtro)
{
try
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete,
InheritanceFlags.ContainerInherit,
PropagationFlags.None,AccessControlType.Allow));
RegistryPermission rp = new RegistryPermission(
System.Security.Permissions.RegistryPermissionAccess.AllAccess,
chiave.Name);

chiave.DeleteSubKeyTree(filtro);
}
catch (Exception ex) { }
}

munissor Profilo | Senior Member

Prova con RegistryRights.FullControl...

roccomita Profilo | Newbie

ho provato ma mi da lo stesso errore.

nn mi permette di cancellare la chiave!


munissor Profilo | Senior Member

Allora..andiamo per esclusione...prova a togliere le cose sui permessi se sei amministratore. E lascia solo DeleteKeyTree...

Prova con altre chiavi (magari chiavi inutili che crei tu ad hoc) e vedi che ti dice...

Se hai Windows Vista disabilita UAC o esegui il programma come amministratore.

roccomita Profilo | Newbie

Allora, premesso che sn amministratore, ti posso confermare che altre chiavi appartenenti ad
altri percorsi del registro me le fa cancellare tranquillamente. però se provo a cancellare chivi appartenenti al percorso

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{834C5A62-E0BB-4FB4-87B9-F37C869C976B}\TypeLib

non me la fa cancellare. Ne ho presa una a caso, Il mio intendo è quello di creare un prog che mi cancelli le chiavi di registro invalide visto ke le chiavi typelib, in relazione a quel percorso, che non contengono valori si possono cancellare tranquillamente!
io faccio prima una scansione del percorso

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\*******\typelib

e poi cerco di cancellare le chiavi invalide!!!

munissor Profilo | Senior Member

Mistero della fede... O il sistema (o un antispyware o antivirus) protegge in qualche modo quelle chiavi o non ho idea..

prova in alternativa ad usare HKCR\CLSID (dovrebbe essere lo stesso percorso, uno dei due dev'essere un "collegamento" ma non ricordo esattamente quale.Prova a creare una chiave e vedi se ti appare anche nell'altro percorso...)

roccomita Profilo | Newbie

Finalmente ieri ci sono riuscito a cancellare le maledette chiavi!!!!
Come al solito quando le provi tutte e non risolvi il problema, di sicuro è una stupidagine.
dov'era l'errore.
io aprivo le chiavi con il metodo opensubkey e nn impostavo i permessi di scrittura come parametro. Era semplice!!! Cmq mi ha fatto piacere il tuo aiuto , quindi accetto la tua risposta.
cmq grazie a te ho imparato cose nuove!!!
grazie, alla prossima!!!

P.S. Se vuoi mi dai la tua mail e ti mando il prog ke ho creato in c#.

munissor Profilo | Senior Member

puoi allegarlo qui al thread.. Cmq un software che cancella chiavi di sistema in questo modo è difficile che venga eseguito facilmente...

M3talG3ar Profilo | Newbie

Grazie infinite, credo avrei passato un'intera giornata dietro a questo problema se non avessi pubblicato la soluzione!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5