Benutzer mit den meisten Antworten
C# Express 2010, RegistryKey setzen funktioniert nicht

Frage
-
Hallo,
auf dem XP-Rechner (auch auf Server 2003) versuche ich den RegistryKey für den Bildschirmschoner zu ändern.
Code:
private void writeInRegistry() { RegistryKey rk = Registry.CurrentUser; RegistryKey rkSoftware = rk.OpenSubKey("Control Panel\\Desktop", true); if (rkSoftware != null) { //MessageBox.Show(rkInstaller.View.ToString()); rkSoftware.SetValue("120", "ScreenSaveTimeout"); //rkInstaller.SetValue("value2", "test2"); rkSoftware.Close(); } rk.Close(); }
Das Program endet und bringt keine Fehlermeldung, wenn ich aber den Eintrag unter Eigenschaften/Bildschirmschoner überprüfe steht dort immer noch der alte Wert. Ich habe Admin-Rechte auf dem Rechner. Ich habe festgestellt, dass auch wenn ich die Registry mit "Regedit" manuell editiere, wird der neue Wert für ScreeSaveTimeOut angenommen (und auch im Registrykey angezeigt), schlisse ich dann Regedit, öffne die Eigenschaften/Bildschirmschoner und stelle fest, dass der alte Wert immer noch da ist...
- Bearbeitet Robert Breitenhofer Donnerstag, 3. März 2011 07:37 Formatierung
- Verschoben Robert Breitenhofer Donnerstag, 3. März 2011 07:41 Visual C# Express-Edition (aus:Visual C#)
Antworten
-
var regkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); if (regkey.GetValue("ScreenSaveTimeout") == null) { Console.WriteLine("no value"); regkey.SetValue("ScreenSaveTimeout", "120"); } else { Console.WriteLine(regkey.GetValue("ScreenSaveTimeout")); } Console.ReadKey(); regkey.Close();
Das ist alles was du brauchst, du hast nur die werte von SetValue vertauscht!
Grüße Silvio
- Als Antwort vorgeschlagen Silvio Katzmann Dienstag, 1. Februar 2011 16:51
- Als Antwort markiert Robert Breitenhofer Donnerstag, 3. März 2011 07:40
Alle Antworten
-
..und noch eins, im Deklarationsbereich habe ich:
[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, ViewAndModify ="HKEY_CURRENT_USER")]
- Bearbeitet Robert Breitenhofer Donnerstag, 3. März 2011 07:39 Formatierung
-
var regkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); if (regkey.GetValue("ScreenSaveTimeout") == null) { Console.WriteLine("no value"); regkey.SetValue("ScreenSaveTimeout", "120"); } else { Console.WriteLine(regkey.GetValue("ScreenSaveTimeout")); } Console.ReadKey(); regkey.Close();
Das ist alles was du brauchst, du hast nur die werte von SetValue vertauscht!
Grüße Silvio
- Als Antwort vorgeschlagen Silvio Katzmann Dienstag, 1. Februar 2011 16:51
- Als Antwort markiert Robert Breitenhofer Donnerstag, 3. März 2011 07:40
-
Hallo P
ob das System hier wirklich gleich die neuen Werte übernimmt ist kein .NET-Thema mehr,
ich denke da wäre ein ordentlicher API-Einsatz besser, zB
SystemParametersInfo ( SPI_SETSCREENSAVETIMEOUT ...)
http://www.codeproject.com/Questions/99654/ScreenSaveTimeOut-Registry-updation-not-Reflected-.aspx
und/oder gar die UpdatePerUserSystemParameters oä Massnahmen/APIs. -
Hallo Silvio,
vielen Dank für Deine Hilfe. Es ist ein Teilerfolg zu verbuchen.
1. Der Wert wird mit Deinem Code richtig in die Registry eingetragen und ist (regedit.exe) sichtbar.
2. Die Windows-GUI (Eigenschaften/Bildschirmschoner) "weiss" aber NICHTS davon und der alte Wert wird angezeigt. Folge - der BS reagiert nicht auf den neuen Registryeintrag und alles bleibt beim alten.
3. Nach dem Neustart vom PC wird aber der neue Registrywert erkannt (auch in GUI richtig angezeigt) und der BS schaltet sich wie gewünscht ein.
4. Vermutung: offensichtlich die Einstellung mit Windows-GUI erzwingt erneutes Registryeinlesen(??), was der direkte Zugriff auf Registry nicht macht?