Impossible de modifier une clé en base de registre
Bonjour,
j'ai petit bout de code qui cré une clé en base de registre, et un peu plus tard la modifie. Plutôt qu'un long discours:
Code:
1 2 3 4 5 6 7 8 9 10 11
| RegistryKey key = Registry.CurrentUser.OpenSubKey(TEST_KEY);
if (null == key)//si la clé n'existe pas
{
key = Registry.CurrentUser.CreateSubKey(TEST_KEY);//on la créé
key.SetValue("toto", "titi"); //on ajoute une valeur
key.SetValue("toto", "tutu");//test la modification: OK
key.Close(); //c'est après le close que si je ré-ouvre, je ne peux plus écrire (la lecture est ok)
}
.....
key = Registry.CurrentUser.OpenSubKey(TEST_KEY); //réouverture
key.SetValue("toto", "tata");//LEVEE D'UNE ERREUR!!! |
L'erreur obtenue est:
Citation:
System.UnauthorizedAccessException was unhandled
Message="Cannot write to the registry key."
Source="mscorlib"
StackTrace:
at System.ThrowHelper.ThrowUnauthorizedAccessException(ExceptionResource resource)
at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)
at Microsoft.Win32.RegistryKey.SetValue(String name, Object value)
at MainWindowsFormsApplication.MainForm.test()
at MainWindowsFormsApplication.MainForm..ctor()
at MainWindowsFormsApplication.Program.Main()
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
J'ai alors essayé de fixer les droits sur la clé à la création avec:
Code:
1 2 3 4 5 6 7 8 9 10 11
| string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity mSec = new RegistrySecurity();
RegistryAccessRule rule = new RegistryAccessRule(user,
RegistryRights.FullControl, //Tous les droits
InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
key = Registry.CurrentUser.CreateSubKey(TEST_KEY);
key.SetAccessControl(mSec); |
Bilan: même résultat...
Est-ce que quelqu'un a une chtite idée d'où je fais un loupé??
GROS Merci pour votre aide!!!!!
PS: J'espère que je n'aurai pas du mettre ce message dans le forum Windows...
encore des problèmes d'écriture
Tomlev,
Ca ne fonctionne pas pour moi. J'ai toujours des messages qui me disent que je ne peux pas écrire.
OS : vista
Mon code:
Code:
1 2 3
| RegistryKey rk = baseRegistryKey ;
RegistryKey sk1 = rk.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadWriteSubTree);
sk1.SetValue(KeyName.ToUpper(), Value); |