2008-09-08 5 views
0

Ich habe ein altes, altes Stück Code geerbt (von hoary, ich meine warzig mit vielen undokumentierten Fehlerbehebungen als WTF-y) und es gibt einen Teil, der mir ein bisschen Ärger bereitet . Hier ist, wie es an den Remote Registry verbindet das Add zu bekommen/entfernen Programme Schlüssel:Remote-Verbindung zur Registry und Ausnahmebedingungen

try 
{ 
    remoteKey = RegistryKey.OpenRemoteBaseKey(
     RegistryHive.LocalMachine, addr.Value).OpenSubKey(
     "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"); 
    return 1; 
} 
catch (IOException e) 
{ 
    IOException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 2; 
} 
catch (UnauthorizedAccessException e) 
{ 
    UnauthorizedAccessException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 3; 
} 
catch (System.Security.SecurityException e) 
{ 
    System.Security.SecurityException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 4; 
} 

Jetzt habe ich zwei Probleme:

  • Ich weiß, warum die IOException - wenn es ein Nicht-Windows Maschine wird es werfen. Der Unterschied zwischen UnauthorizedAccessException und SecurityException ist mir nicht so klar. Hat jemand irgendwelche Ideen?

  • Dieses ganze Bit Code wurde entworfen, bevor jemand gedacht hatte, dass Sie Ihre lokale Anmeldung nicht für alles verwenden könnten. Ich kann sowieso nicht herausfinden, wie Sie die Authentifizierung für die Remoteverbindung mit der Registrierung durchführen, und dieser Code sieht so aus, als ob er nur in einem Fall verwendet wird, wenn er diese Informationen nicht von WMI abrufen kann.

Jede Hilfe mit beiden wäre toll.

Antwort

0

Johns Zeiger auf MSDN beantwortet, was UnauthorizedAccessException ist - es erscheint nur, wenn Sie versuchen, mit OpenRemoteBaseKey remote auf einen Schlüssel zuzugreifen.

Wir sind ein wenig vorsichtig über die Änderung des Sicherheitskontexts auf dem Computer - ich habe eine Referenz here über die Verwendung von WMI (die wir bereits für die überwiegende Mehrheit der Schwerarbeit verwenden) auf die Registrierung zugreifen, also könnte ich das stattdessen versuchen.

1

Wahrscheinlich müssen Sie den Identitätswechsel verwenden, um die Anmeldeinformationen des Threads zu ändern, der die Remote-Registrierungsmethoden aufruft. Weitere Informationen zu MSDN finden Sie hier (linky). Grundsätzlich verfügt Ihr Thread über einen Sicherheitskontext, der für verwaltete und nicht verwaltete Anrufe verwendet wird.

1

Gemäß ist UnauthorizedAccessException nicht von OpenSubKey geworfen. Also ich denke, es ist nicht nötig.