private void CheckAllKeysMethod()
 {
     for (int i = ListOfRegKeys.Count; i > 0; i--)
     {
         RegistryListItem item = ListOfRegKeys[i - 1];
         ListOfRegKeys.Remove(item);
         if (CheckAllKeysIsChecked)
         {
             item.IsChecked = true;
         }
         else
         {
             item.IsChecked = false;
         }
         ListOfRegKeys.Insert(i - 1, item);
     }
 }
        private async void AnalyzeMethod()
        {
            mainWindowViewModel.TabControlIsEnabled = false;
            ProgressBarIsIndeterminate = true;
            ListOfRegKeys.Clear();
            if (MissingSoftIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_LOCAL_MACHINE_Software_Microsoft_Windows_CurrentVersion_Uninstall());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(true, true, true, item.Key, item.Value, item.ValueData));
                }
            }
            if (MissingDLLIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_LOCAL_MACHINE_SOFTWARE_Microsoft_Windows_CurrentVersion_SharedDLLs());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(true, false, true, item.Key, item.Value, item.ValueData));
                }
            }
            if (MissingFilesIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_CURRENT_USER_SOFTWARE_Microsoft_Windows_NT_CurrentVersion_AppCompatFlags_Compatibility_Assistant());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(false, false, true, item.Key, item.Value, item.ValueData));
                }
            }
            if (MissingMUIIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_CURRENT_USER_SOFTWARE_Classes_Local_Settings_Software_Microsoft_Windows_Shell_MuiCache());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(false, false, true, item.Key, item.Value, item.ValueData));
                }
            }
            if (InvalidFileExtensionsIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_CURRENT_USER_SOFTWARE_Microsoft_Windows_CurrentVersion_Explorer_FileExts());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(false, true, true, item.Key, item.Value, item.ValueData));
                }
            }
            if (ReferencesToTheInstallerIsChecked)
            {
                RegistryItem[] regItems = await Task.Run(() => WindowsRegistryCleaner.HKEY_LOCAL_MACHINE_SOFTWARE_Microsoft_Windows_CurrentVersion_Installer_Folders());

                foreach (RegistryItem item in regItems)
                {
                    ListOfRegKeys.Add(new RegistryListItem(true, false, true, item.Key, item.Value, item.ValueData));
                }
            }
            mainWindowViewModel.TabControlIsEnabled = true;
            ProgressBarIsIndeterminate = false;
        }
        private async void CleanMethod()
        {
            mainWindowViewModel.TabControlIsEnabled = false;
            ProgressBarIsIndeterminate = true;

            string toExecuteAsAdmin = null;
            string toExecuteAsUser  = null;

            foreach (RegistryListItem item in ListOfRegKeys)
            {
                if (item.IsChecked)
                {
                    string value = item.Value;
                    if (value != null)
                    {
                        //if end of ValueName is "\" char
                        if (value.LastIndexOf(@"\") == value.Length - 1)
                        {
                            value += @"\";
                        }
                    }
                    //
                    if (item.DeleteFullKey)
                    {
                        if (item.ReqAdminToModify)
                        {
                            toExecuteAsAdmin += " -DeleteKey \"" + item.Key + "\"";
                        }
                        else
                        {
                            toExecuteAsUser += " -DeleteKey \"" + item.Key + "\"";
                        }
                    }
                    else
                    {
                        if (item.ReqAdminToModify)
                        {
                            toExecuteAsAdmin += " -DeleteValue \"" + item.Key + "\" \"" + value + "\"";
                        }
                        else
                        {
                            toExecuteAsUser += " -DeleteValue \"" + item.Key + "\" \"" + value + "\"";
                        }
                    }
                }
            }

            if (toExecuteAsUser != null)
            {
                bool result = await StartRegCleaner(false, toExecuteAsUser);

                if (result)
                {
                    for (int i = ListOfRegKeys.Count; i > 0; i--)
                    {
                        if ((ListOfRegKeys[i - 1].IsChecked) && (!ListOfRegKeys[i - 1].ReqAdminToModify))
                        {
                            ListOfRegKeys.Remove(ListOfRegKeys[i - 1]);
                        }
                    }
                }
            }

            if (toExecuteAsAdmin != null)
            {
                bool result = await StartRegCleaner(true, toExecuteAsAdmin);

                if (result)
                {
                    for (int i = ListOfRegKeys.Count; i > 0; i--)
                    {
                        if ((ListOfRegKeys[i - 1].IsChecked) && (ListOfRegKeys [i - 1].ReqAdminToModify))
                        {
                            ListOfRegKeys.Remove(ListOfRegKeys[i - 1]);
                        }
                    }
                }
            }

            mainWindowViewModel.TabControlIsEnabled = true;
            ProgressBarIsIndeterminate = false;
        }