Laden...

Registryzugriff Exception

Erstellt von KRambo vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.492 Views
K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 16 Jahren
Registryzugriff Exception

Hallo hab mal ne Frage und zwar muss ich bei einem kleinen Programm die Registry auslesen. Was ich allerdings nicht verstehe: wenns den Schlüssel, den ich auslesen möchte (mit RegKey.GetValue()) nicht gibt dann bekomme ich nur ne normale System.NullReferenceException.

Hab jetzt das Problem da nicht drauf reagieren zu können weil ich da nen ganzen Block in nem Trycatch Block hab und allgemein auf Exceptions reagiere. Und als Fehlermeldung kommt jetzt logischerweise nur die Exception raus mit nem nichtssagenden Text 🙁 jemand ne Idee?

S
489 Beiträge seit 2007
vor 16 Jahren

Was für eine Idee sollten wir haben? Spezifiziere bitte! Die Fehlermeldung ist doch völlig ok! Du kannst doch auch try - Catch schachteln, also umklammere doch einfach die entsprechende Anweisung mit einem neuen try - catch und schln funzt die Sache wie Du willst. .... Nein, es geht immer nur einmal in einen catch Zweig, der zweite wird nicht aufgerufen.

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo,

ich verstehe dein Problem nicht. Hast du Probleme die Exception abzufangen, weil du nicht weißt, wie du try catch einsetzt - dann wäre das ein Fall für's openbook.

Was meinst du mit

Hab jetzt das Problem da nicht drauf reagieren zu können weil ich da nen ganzen Block in nem Trycatch Block hab und allgemein auf Exceptions reagiere ? Kannst du vielleicht etwas (schemahaften) Code posten?

//EDIT: Und wieder zu spät...

2.223 Beiträge seit 2005
vor 16 Jahren

Hallo KRambo,

Dir ist schon klar das Du in einem try catch einen weiteren try catch machen könntest?

aber vermutlich besser wäre der folgende Weg


            try{
                 //CODE
            }catch (NullReferenceException ne)
            {
                MessageBox.Show("registry is nich");
            }
            catch (exception e) {
                MessageBox.Show("ein fehler");
            }


nur bedenke das allgemein kommt immer im schluss

mfg

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 16 Jahren

Ok Pseudocode:

try{
// Registry öffnen
RegKey = Registry.CurrentUser.OpenSubKey(Key, true);

// Wert auslesen und Combobox zuweisen
vString = RegKey.GetValue("wert").ToString();
this.cboBla.SelectedValue = vString;
} catch(Exception vEx) {
MessageBox.Show(vEx.Message);
}

Gibts nicht irgend ne Möglichkeit darauf zu reagieren wenn der Wert nicht vorhanden is und dann ne Exception händisch auslösen mit ner eigenen Bescheibung? Was will ein User mit ner NullReferenceException? Der kann ja nix damit anfangen. Wenn als Fehlermeldung aber ne Meldung kommen würde dass nicht auf die Registrierung zugegriffen werden kann das wär viel hilfreicher.

Nun verstanden? Sorry wenns undeutlich war was ich wollte.

Soll heißen in etwa in dieser Art hätt ichs gerne (darum auch erst in nen String schreiben):

vString = RegKey.GetValue("wert").ToString();
if (vString == null) then throw new Exception();

Funktioniert aber so nicht weil da schon die Exception ausgelöst wird, wenn ich vString den Wert zuweisen will.

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo,

wie schon die Beiträge vorher lauteten:
Entweder noch einen try / catch Block:


try
{
   // Registry öffnen
   RegKey = Registry.CurrentUser.OpenSubKey(Key, true);

   // Wert auslesen und Combobox zuweisen
   try
   {
      vString = RegKey.GetValue("wert").ToString();
   }
   catch
   {
        MessageBox.Show(/*Parameter*/);
         return;
   }
   this.cboBla.SelectedValue = vString;
} 
catch(Exception vEx) 
{
   MessageBox.Show(vEx.Message);
}

oder mehrere catch Blöcke:


try
{
   // Registry öffnen
   RegKey = Registry.CurrentUser.OpenSubKey(Key, true);

   // Wert auslesen und Combobox zuweisen
   vString = RegKey.GetValue("wert").ToString();

   this.cboBla.SelectedValue = vString;
}
catch (NullReferenceException e)
{
     MessageBox.Show(/*Parameter*/);
}
catch(Exception vEx) 
{
   MessageBox.Show(vEx.Message);
}

vString = RegKey.GetValue("wert").ToString();  
if (vString == null) then throw new Exception();  

kann nicht funktionieren, da du mit ToString() bereits auf einen null Verweis zugreifst.
//Edit: Außerdem ist "then" keine gültige C# Syntax 😉

Generell wäre aber besser:


object o = RegKey.GetValue("wert");
if (o == null)
{
   MessageBox(/*und so weiter*/);
}
else
{
   vString = o.ToString();
}

//EDIT: Mir muss richtig langweilig sein 🙂

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 16 Jahren

Ok stimmt danke für eure Hilfe 🙂