public static void set(RegistryAccesser accesser, RegistryHive hive, string subKey, string valueName, RegistryValueKind kind, T value) { T?oldValue = accesser.getValue <T>(hive, subKey, valueName); accesser.setValue <T>(hive, subKey, valueName, value, kind); T?newValue = accesser.getValue <T>(hive, subKey, valueName); Console.WriteLine($"{valueName,40}: {oldValue}\t--> {newValue}"); }
public int Settings() { int result = 0; Console.WriteLine("Start Settings.."); this.withThrowExceptionIfPermissionDeneed(); // 時間取得と計算 DateTime dtNow = DateTime.Now; DateTime dtBaseTime = dtNow.AddMinutes(31); // 31分加算した日時を基準に計算する。 DateTime dtStartTime = dtBaseTime.AddHours(-2); DateTime dtEndTime = dtStartTime.AddHours(12); Console.WriteLine($"Now : {dtNow}"); Console.WriteLine($"BaseTime : {dtBaseTime} (add 31 min)"); Console.WriteLine($"StartTime : {dtStartTime} (add -2 hour) --> {dtStartTime.Hour}"); Console.WriteLine($"EndTime : {dtEndTime} (add +12 hour) --> {dtEndTime.Hour}"); // https://docs.microsoft.com/ja-jp/windows/deployment/update/waas-restart // https://docs.microsoft.com/ja-jp/security-updates/windowsupdateservices/18128158 // https://blogs.technet.microsoft.com/jpwsus/2017/09/08/wecanstop-wu/ RegistryAccesser accesser = new RegistryAccesser(); Console.WriteLine(@"HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Microsoft\WindowsUpdate\UX\Settings", @"SetActiveHours", RegistryValueKind.DWord, 1); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Microsoft\WindowsUpdate\UX\Settings", @"ActiveHoursStart", RegistryValueKind.DWord, dtStartTime.Hour); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Microsoft\WindowsUpdate\UX\Settings", @"ActiveHoursEnd", RegistryValueKind.DWord, dtEndTime.Hour); // Policies Console.WriteLine(@"HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate", @"SetActiveHours", RegistryValueKind.DWord, 1); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate", @"ActiveHoursStart", RegistryValueKind.DWord, dtStartTime.Hour); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate", @"ActiveHoursEnd", RegistryValueKind.DWord, dtEndTime.Hour); Console.WriteLine(@"HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", @"AuOptions", RegistryValueKind.DWord, 4); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", @"AlwaysAutoRebootAtScheduledTime", RegistryValueKind.DWord, 0); RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", @"NoAutoRebootWithLoggedOnUsers", RegistryValueKind.DWord, 1); Console.WriteLine(@"HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer"); // 再起動マネージャーの使用を禁止する RegistryCheckWriter <int> .set(accesser, RegistryHive.LocalMachine, @"SOFTWARE\Policies\Microsoft\Windows\Installer", @"DisableAutomaticApplicationShutdown", RegistryValueKind.DWord, 1); // TODO; Notifications cannot be displayed by calling from Task Scheduler. // Notification string appUserModelID = Program.generateDefaultAppUserModelID(); var notification = new WindowsNotification(appUserModelID); notification.Show("PreventReboot", $"StartTime: {dtStartTime.Hour} / EndTime: {dtEndTime.Hour}"); return(result); }