У меня есть служба, которая должна обновлять реестр каждые 5 минут (противодействовать gpo). Код работает нормально в обычном приложении, но когда я помещаю его в службу Windows, он не вносит изменения. Я использую локальную системную учетную запись для службы, и она не выдает никаких исключений
Код ниже работает в обычном консольном приложении, но не в сервисе:
RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
if (key != null)
{
key.SetValue("ScreenSaverIsSecure", "0", RegistryValueKind.String);
key.SetValue("ScreenSaveActive", "0", RegistryValueKind.String);
key.SetValue("ScreenSaveTimeOut", "0", RegistryValueKind.String);
key.SetValue("SCRNSAVE.EXE", "", RegistryValueKind.String);
}
key = Registry.CurrentUser.OpenSubKey(@"Software\Policies\Microsoft\Windows\Control Panel\Desktop", true);
if (key != null)
{
key.SetValue("ScreenSaverIsSecure", "0", RegistryValueKind.String);
key.SetValue("ScreenSaveActive", "0", RegistryValueKind.String);
key.SetValue("ScreenSaveTimeOut", "0", RegistryValueKind.String);
key.SetValue("SCRNSAVE.EXE", "", RegistryValueKind.String);
}
System.Diagnostics.Process.Start(@"c:\windows\System32\RUNDLL32.EXE", "user32.dll, UpdatePerUserSystemParameters");
Есть идеи?
EDIT:
Спасибо за ответы. Я не знаю, почему «CurrentUser» ускользнул от моего внимания. Спасибо за указание на это.
Моя проблема по-прежнему заключается в том, что групповая политика направлена против текущего пользователя. Сейчас я рассматриваю просто создание приложения, которое загружается при запуске и остается активным. Любые другие предложения будут приветствоваться.
EDIT:
Что касается комментария Уилла, я не могу найти подпись функции UpdatePerUserSystemParameters в интерфейсе win32. Означает ли это, что он может быть вызван без параметров?
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool UpdatePerUserSystemParameters();