Come utilizzare RegistryKey.SetValue

Sto cercando di creare una nuova chiave del registro di sistema utilizzando il seguente codice e sempre questo errore:

Cannot write to the registry key.

Dove sto andando male????

var rs = new RegistrySecurity();
string user = Environment.UserDomainName + "\\" + Environment.UserName;
rs.AddAccessRule(new RegistryAccessRule(user,
                                        RegistryRights.WriteKey | RegistryRights.SetValue,
                                        InheritanceFlags.None,
                                        PropagationFlags.None,
                                        AccessControlType.Allow));
RegistryKey key;
key = Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", RegistryKeyPermissionCheck.ReadSubTree, rs);
key.SetValue("kashif", 1, RegistryValueKind.DWord);
key.Close();
Sì, io sono in esecuzione con un account di amministratore

OriginaleL’autore kashif | 2013-01-25

2 risposte

  1. 7

    È necessario aprire la chiave appena creata per l’accesso in lettura/scrittura:

    key = Registry.LocalMachine.CreateSubKey(
        @"Software\Microsoft\Windows\CurrentVersion\Policies\System",
        RegistryKeyPermissionCheck.ReadWriteSubTree, //read-write access
        rs);
    L’applicazione è in esecuzione con privilegi elevati?
    Ho effettuato l’accesso con privilegi di amministratore. quando sto costruendo l’applicazione e fare clic destro sul file exe e poi eseguirlo come amministratore funziona bene e che non vorrei. ecco perché io sto usando la protezione del registro di sistema.
    Non funziona così. Impostare la sicurezza per la nuova chiave, ma per creare la nuova chiave di cui avete bisogno per avere il permesso di scrittura per System prima. E l’unico modo per ottenere che è quello di essere eseguito con privilegi elevati.
    Non è possibile ottenere i privilegi di amministrazione “attraverso la programmazione”. Se si potesse, chiunque altro avrebbe fatto così e l’UAC richiesta di elevazione dei privilegi non avrebbe alcun motivo di esistere, dato che tutti sarebbero stati senza.
    grazie. hai risolto il mio problema, ma avendo modificato la mia codifica il modo in cui hai suggerito è creato un altro problema che ho risolto da questo link stackoverflow.com/questions/3446211

    OriginaleL’autore

  2. 0

    Non avete bisogno di un rs parte a meno che non si sta tentando di assegnare autorizzazioni specifiche per il tasto che si sta creando.

    È necessario:

    1. Aprire la chiave in cui si desidera creare la sottochiave e assegnarlo a una RegistryKey variabile. Aggiungi un true Booleano per segno come scrittura.
    2. Creare la sottochiave utilizzo di tale variabile, e assegnare all’indietro per la stessa variabile.
    3. Impostare il valore utilizzando il RegistryKey variabile.

    Esempio:

    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);
    key = key.CreateSubKey("MyNewKey");
    key.SetValue("kashif", 1, RegistryValueKind.DWord);

    Se si desidera modificare una chiave esistente, come System è, non usare CreateSubKey, perché la chiave è già presente. Che è solo per la creazione di nuove chiavi. Si utilizza OpenSubKey.

    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);
    key.SetValue("kashif", 1, RegistryValueKind.DWord);

    OriginaleL’autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *