#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); } }
Комментариев нет:
Отправить комментарий