2012-03-21 13 views
6

// Editar: ¡Oh! Es extraño que he estado trabajando en esto durante un día y ahora simplemente se dio cuenta de que tenía que hacer:Servicio de Windows de 32 bits que se escribe en el registro de 64 bits. (Teclas AutoAdminLogon)

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Y entonces todo funcionaba. No sabía que tenías que hacer eso. Gracias a todos los que respondieron. Solo estaba jugando y busqué mi llave y noté que estaba siendo colocada en el lugar equivocado.

// pregunta original:

no he visto una solución de trabajo para esto y no estoy seguro de si se trata de un error.

Tengo un servicio de Windows C# 32-bit que se ejecuta en Windows 7 de 64 bits. Mi objetivo es escribir en el registro de 64 bits y no en la subclave Wow6432Node, ya que para AutoAdminLogon un sistema de 64 bits no parece verificar la vista de 32 bits de las claves.

Así que mi código es el siguiente: se lanza

static public void LoginAsGuest(EventLog eventLogger) 
{ 
    RegistrySecurity userSecurity = new RegistrySecurity(); 
    RegistryAccessRule userRule = new RegistryAccessRule("Everyone", RegistryRights.FullControl, AccessControlType.Allow); 
    userSecurity.AddAccessRule(userRule); 

    var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
    key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree); 

    if (key == null) 
    { 
     eventLogger.WriteEntry("Error accessing the registry key"); 
    } 
    else 
    { 
     try 
     { 
      key.SetValue("AutoAdminLogon", "1", RegistryValueKind.String); 
      key.SetValue("DefaultUserName", "guest", RegistryValueKind.String); 
      key.SetValue("DefaultPassword", "password", RegistryValueKind.String); 
     } 
     catch (Exception exception) 
     { 
      eventLogger.WriteEntry("Problem setting up keys: " + exception); 
     } 
    } 
    key.Close(); 

    Reboot(); 
} 

Sin excepción o error. No se escribe nada en el registro en la vista de 32 bits o de 64 bits. He intentado usar:

key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Pero tiene el mismo resultado. Ahora bien, si sólo escribo sin ninguna vista entonces mi programa escribe correctamente a la subclave:

SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon 

Básicamente todo lo que quiero es escribir en la subclave:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

Alguien sabe por qué el código anterior ISN' t escribiendo a la clave solicitada? (Señalaré que AutoAdminLogon y las otras dos claves son utilizadas por el proveedor de credenciales predeterminado de Windows, de modo que cuando Windows se inicia comprueba esas claves y si AutoAdminLogon está configurado en 1, entonces inicia sesión automáticamente con el nombre de usuario y la contraseña especificados. Estoy haciendo esto para permitir que una computadora inicie sesión como invitado configurando las teclas y luego reiniciando la computadora.

+0

intente monitor de proceso para ver si se producen las llamadas de bajo nivel para escribir en el registro –

+1

¿Lo ha intentado desde una aplicación de escritorio? Puede ser más fácil depurar allí. –

+1

¿Podría ser un problema de permisos? Si no tiene los metadatos en su ejecutable que dicen que entiende el UAC, entonces creo que las últimas versiones de Windows informan sobre errores de permisos y éxitos. – Guvante

Respuesta

2

Es extraño que he estado trabajando en esto durante un día y ahora simplemente se dio cuenta de que tenía que hacer:

key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 

Y entonces todo funcionaba. No sabía que tenías que hacer eso. Gracias a todos los que respondieron. Solo estaba jugando y busqué mi llave y noté que estaba siendo colocada en el lugar equivocado.

Cuestiones relacionadas