Chiavi di registro [C#]

martedì 08 luglio 2008 - 18.40

piero87 Profilo | Junior Member

Stavo provando a lavorare con le chiavi di registro. Dopo aver creata una con un file .reg, volevo leggerla con c#.
Ho trovato questo esempio molto semplice:

string urlPDF; //Accediamo alla chiave HKEY_LOCALMACHINE RegistryKey _chiave = Registry.LocalMachine; >>>>QUI ERRORE //Accediamo alla cartella contenente la nostra sottochiave _chiave = _chiave.OpenSubKey(”SOFTWARE\\Livello1\\Livello2″); //recuperiamo il valore della chiave urlPDF = _chiave.GetValue(”nome_chiave”).ToString();

Però mi viene detto che manca uno using o un riferimento sulle parole registrykey e registry....cosa devo cambiare? immagino che sia una domanda stupida, ma non ho ancora molta esperienza e chiedo aiuto a chi ne sa più di me.
Piero





AGGIORNAMENTO
Ho risolto quanto detto sopra!
Ora però ho un altro problema; eseguo il seguente codice:
string urlPDF; RegistryKey chiave = Registry.Users; chiave = chiave.OpenSubKey("PROVA"); urlPDF = chiave.GetValue("TESTO").ToString(); MessageBox.Show(urlPDF);

Dove la chiave l'avevo così definita:
REGEDIT4

[HKEY_CURRENT_USER\PROVA]
@ = "MIO VALORE"
"TESTO" = "NUOVO VALORE STRINGA"


L'errore dato è:

Eccezione non gestita di tipo "System.NullReferenceException" in prova.exe

Informazioni aggiuntive: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Cosa devo fare??

Enne Profilo | Junior Member

Ciao, devi prima di tutto aggiungere come namespace Microsoft.Win32.

using Microsoft.Win32;

Poi puoi procedere in questo modo:

string urlPDF;
RegistryKey HkLocal = Registry.LocalMachine;
RegistryKey chiave = HkLocal.OpenSubKey(@"Software\Livello1\Livello2");
urlPDF = (String)chiave.GetValue("value");

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

grazie!! mi hai risposto mentre aggiornavo il primo messaggio...posso chiederti se sai rispondermi anche alla seconda parte appena aggiutna?? (non la riscrivo solo per non scrivere due volte la stessa cosa)
Piero

piero87 Profilo | Junior Member

ho provato come mi dici te, facendo visualizzare in un messagebox la stringa risultante...ma viene vuota....potresti aiutarmi?? (ho modificato il file .reg andando nelle chiavi local machine)
Piero

Enne Profilo | Junior Member

L'eccezione System.NullReferenceException era dovuta al fatto che sbagliavi il percorso nel registro.
Fammi capire, qual'è il nuovo percorso ora e la chiave da leggere?

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

sembra che ora si sia risolta...cmq ho creato la chiave tramite codice di c# e non tramite un file .reg...cambia qualcosa nella sostanza??
Piero

Enne Profilo | Junior Member

No non cambia niente. Prova a creare un .reg in questo modo e a leggerlo da C#:

REGEDIT4

[HKEY_CURRENT_USER\Software\Tua_Applicazione] //cambia qui ovviamente
"nomechiave"="tuo_valore"

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

ok, dovrebbe essere molto più comodo se riesco a fare questo file .reg!! grazie!!
Piero

piero87 Profilo | Junior Member

come cambia se lo voglio fare in local machine?
Piero

Enne Profilo | Junior Member

Ricordati di chiudere il thread
Ciao.

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

si...ma ti avevo chiesto un ultima cosa! come cambia il file .reg se voglio lavorare nella local machine invece che in current user?
Piero

Enne Profilo | Junior Member

Ops, scusami.. mi avevi risposto mentre ti stavo scrivendo io :)

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Tua_Applicazione] //cambia qui ovviamente
"nomechiave"="tuo_valore"

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

ora nn funziona...
andava bene se lo creavo con c#
ma il file reg da problemi...nn leggo niente!!!

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Programma]
"versioni" = "C:\Programmi\Programma"

Dove sbaglio??
Piero

piero87 Profilo | Junior Member

con il file .reg che ho postato sopra e con questo codice:

string path;
RegistryKey HkLocal = Registry.LocalMachine;
RegistryKey _chiave = HkLocal.OpenSubKey("SOFTWARE\\Programma");
path = (String)_chiave.GetValue("versioni");
MessageBox.Show(path);


la variabile path rimane vuota....perchè??
Piero

Enne Profilo | Junior Member

Non funziona perchè sbagli ad inserire il valore

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Programma]
"versioni" = "C:\\Programmi\\Programma"

Rocco Verrastro
.NET Programmer - Web Developer

piero87 Profilo | Junior Member

oooooooooooooooooooooooooooooooooo

GRAZIE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Piero

Enne Profilo | Junior Member

Potevi dirlo dall'inizio qual'era il valore che andavi a inserire, me ne sarei accorto subito
Buona continuazione di lavoro

Rocco Verrastro
.NET Programmer - Web Developer
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