Pregunta

He heredado un canoso viejo trozo de código (por canoso, me refiero a la verruga con un montón de indocumentados correcciones de errores de WTF-y) y hay una parte que me da un poco de problemas.He aquí cómo se conecta con el registro remoto para obtener el agregar/quitar programas clave:

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

Ahora, tengo dos problemas:

  • Yo sé por qué el IOException - si no es un equipo de Windows se va a tirar eso.La diferencia entre UnauthorizedAccessException y SecurityException no estoy tan claro.Alguien tiene alguna idea?

  • Todo este fragmento de código fue diseñado antes de que nadie había pensado usted no puede utilizar su inicio de sesión local para todo.No puedo trabajar cómo hacer la autenticación para conectar de forma remota en el registro, de todos modos, y este código parece que sólo se utiliza en un caso, cuando no se puede obtener esta información de WMI.

Cualquier ayuda con cualquiera de ellos sería genial.

¿Fue útil?

Solución 3

Juan puntero a MSDN respondió a lo UnauthorizedAccessException es por - que sólo aparece cuando se intenta acceder a una clave de forma remota, utilizando OpenRemoteBaseKey.

Estamos un poco preocupado acerca de cómo cambiar el contexto de seguridad en el ordenador he encontrado una referencia aquí sobre el uso de WMI (que ya estamos usando para la gran mayoría de la carga pesada) para tener acceso al registro, por lo que yo podría tratar de ese lugar.

Otros consejos

Usted probablemente tendrá que usar la suplantación de cambio de las credenciales de un hilo que se llama el registro remoto métodos.Ver aquílinky) para algunos la información en MSDN.Básicamente, el subproceso tiene un contexto de seguridad que se utiliza para hacer administrado y no administrado llamadas.

De acuerdo a MSDN, UnauthorizedAccessException es no es tirar a la por OpenSubKey.Así que creo que no se necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top