Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Как удалить контрольные точки windows?

#c_sharp #wmi


За основу взят этот код, я его немного переделал.

Создал метод который возвращает все контрольные точки восстановления

public static string GetPoint()
{
  var Results = new StringBuilder();
  try
  {
    using (ManagementObjectCollection searcher = new ManagementObjectSearcher("root\\DEFAULT",
"SELECT * FROM SystemRestore").Get())
    {
       foreach (ManagementBaseObject collection in searcher)
       {
          string description = collection["description"].ToString(); // Имя контрольной
точки
          string sequencenumber = ((uint)collection["sequencenumber"]).ToString();
// Номер контрольной точки

           Results.AppendLine(sequencenumber);
       }
    }
  }
  catch (Exception ex) { Console.WriteLine(ex.Message); }
  return Results.ToString();
}


На выходе получаю порядковые номера контрольных точек Windows: 62, 73, 

Но вот как мне удалить их через массив не понимаю, попробовал прогнать через foreach

foreach (var test in GetPoint()) // var возвращает char
{
   SRRemoveRestorePoint(test); // показывает только 2 
}


но это не помогло. 
Что исправить нужно?

[UPD] 

Если просто записать SRRemoveRestorePoint(62); то точка восстановления удаляется
нормально.
    


Ответы

Ответ 1



Решил вопрос следующим способом: Взял из этого примера Удаляет все контрольные точки, проверил. P.S: Для запуска требуются права Администратора. public static void GetPoint() { string[] sequencenums = new string[100]; int c = 0; try { using (ManagementObjectCollection searcher = new ManagementObjectSearcher("root\\DEFAULT", "SELECT * FROM SystemRestore").Get()) { foreach (ManagementBaseObject collection in searcher) { string description = collection["description"].ToString(); // Имя контрольной точки string sequencenumber = ((uint)collection["sequencenumber"]).ToString(); // Номер контрольной точки sequencenums[c] = sequencenumber; c++; } } } catch (Exception ex) { Console.WriteLine(ex.Message); } while (c >= 0) { int test = SRRemoveRestorePoint(Convert.ToInt32(sequencenums[c])); Console.WriteLine($"Point {test} deleted successfully!"); c--; } } Если у Вас есть предложения по улучшению, давайте) [UPD] SRRemoveRestorePoint Так же нашёл решение ещё одно, решил просто создать цикл for и прогнать в нём. Самое интересное что такой способ даже не вызывает никаких исключений и можно использовать спокойно в отдельном потоке. // Запуск от Администратора. public static void DeletePoint() { for (int i = 0; i < 100; i++) { SRRemoveRestorePoint(i); } }

Комментариев нет:

Отправить комментарий