За основу взят этот код, я его немного переделал.
Создал метод который возвращает все контрольные точки восстановления
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);
то точка восстановления удаляется нормально.
Решил вопрос следующим способом: Взял из этого примера
Удаляет все контрольные точки, проверил.
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);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть массив объектов класса A
Есть задача, сделать выборку в таблице по возрасту - до ЛЕТДата рождения хранится в типе поля date
Как сделать автоматическую смену внешнего ключа в таблице при удалении родительской записи в другой таблице?