Пример #1
0
        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}");
        }
Пример #2
0
        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);
        }