// 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).
prova il monitoraggio del processo per verificare se si verificano chiamate di basso livello per scrivere nel registro –
Hai provato da un'applicazione desktop? Potrebbe essere più facile eseguire il debug qui. –
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