2012-03-21 8 views
6

// Modifica: oh wow. E 'strano che ho lavorato su questo per un giorno all'altro e appena realizzato che dovevo fare:Servizio Windows a 32 bit che scrive sul registro a 64 bit. (Tasti AutoAdminLogon)

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

E poi tutto ha funzionato. Non sapevo che dovevi farlo. Grazie per tutti quelli che hanno risposto. Stavo solo scherzando e ho cercato la mia chiave e ho notato che veniva piazzata nel posto sbagliato.

// domanda originale:

non ho visto una soluzione di lavoro per questo e non sono sicuro se si tratta di un bug.

Ho un servizio Windows C# 32 bit in esecuzione su Windows 7 a 64 bit. Il mio obiettivo è scrivere sul registro a 64 bit e non sulla sottochiave Wow6432Node poiché per AutoAdminLogon un sistema a 64 bit non sembra controllare la vista a 32 bit delle chiavi.

Quindi il mio codice è il seguente: è gettato

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

Nessuna eccezione o errori. Nulla viene scritto nel registro nella vista a 32 o 64 bit. Ho provato a utilizzare:

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

Ma ha lo stesso risultato. Ora, se mi limito a scrivere senza alcuna vista poi il mio programma scrive con successo alla sottochiave:

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

In pratica tutto quello che voglio è quello di scrivere alla sottochiave:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

Qualcuno sa il motivo per cui il codice di cui sopra isn' t scrivendo sulla chiave richiesta? (Farò notare che AutoAdminLogon e le altre due chiavi sono utilizzate dal provider di credenziali predefinito di Windows in modo tale che all'avvio di Windows controlla quelle chiavi e, se AutoAdminLogon è impostato su 1, si collega automaticamente con il nome utente e la password specificati. m facendo questo per consentire a un computer di accedere come ospite impostando le chiavi e riavviando il computer).

+0

prova il monitoraggio del processo per verificare se si verificano chiamate di basso livello per scrivere nel registro –

+1

Hai provato da un'applicazione desktop? Potrebbe essere più facile eseguire il debug qui. –

+1

Potrebbe essere un problema di autorizzazioni? Se non hai i metadati sul tuo eseguibile che dice che capisci il controllo dell'account utente, credo che le ultime versioni di Windows riportino errori e successi dei permessi. – Guvante

risposta

2

E 'strano che ho lavorato su questo per un giorno all'altro e appena realizzato che dovevo fare:

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

E poi tutto ha funzionato. Non sapevo che dovevi farlo. Grazie per tutti quelli che hanno risposto. Stavo solo scherzando e ho cercato la mia chiave e ho notato che veniva piazzata nel posto sbagliato.

Problemi correlati