2008-09-08 12 views
0

J'ai hérité d'un vieux morceau de code (je veux dire warty avec beaucoup de corrections de bogues non documentées par rapport à WTF-y) et il y a une partie qui me pose un problème . Voilà comment il se connecte au Registre à distance pour obtenir l'ajout/suppression de programmes clés:Connexion à un registre à distance, et obtention d'exceptions

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; 
} 

Maintenant, j'ai deux problèmes:

  • Je sais pourquoi le IOException - si c'est un non-Windows la machine ça va jeter ça. La différence entre UnauthorizedAccessException et SecurityException n'est pas si claire. Quelqu'un a une idée?

  • Tout ce code a été conçu avant que quiconque ne pense que vous ne pourriez pas utiliser votre connexion locale pour tout. Je ne peux pas savoir comment vous faites l'authentification pour vous connecter à distance au registre, et ce code semble être utilisé seulement dans un cas, quand il ne peut pas obtenir cette information de WMI.

Toute aide avec l'un ou l'autre serait génial.

Répondre

0

Le pointeur de John vers MSDN a répondu à la définition de UnauthorizedAccessException - il n'apparaît que lorsque vous essayez d'accéder à une clé à distance, en utilisant OpenRemoteBaseKey. Nous sommes un peu inquiets de changer le contexte de sécurité sur l'ordinateur - J'ai trouvé une référence here sur l'utilisation de WMI (que nous utilisons déjà pour la grande majorité des charges lourdes) pour accéder au registre, donc je pourrais essayer cela à la place.

1

Vous devez probablement utiliser l'emprunt d'identité pour modifier les informations d'identification du thread qui appelle les méthodes de registre distant. Voir ici (linky) pour plus d'informations sur MSDN. Fondamentalement, votre thread a un contexte de sécurité qui est utilisé pour faire des appels gérés et non gérés.

1

Selon MSDN, UnauthorizedAccessException est non levé par OpenSubKey. Donc je pense que ce n'est pas nécessaire.