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