WedX - журнал о программировании и компьютерных науках

Как установить точки восстановления системы в Win8

Используя D5, я хотел бы иметь приложение, которое создает точку восстановления системы с описанием. Я нашел несколько бесплатных программ в Интернете, но они не работают с Win8, но работают с Win7.

Я нашел этот вопрос , что дало мне полпути к выполнению того, что мне нужно сделать, поскольку оно работает с Win8 при компиляции и запуске «От имени администратора».

Я также нашел страницу в MSDN, в которой описывается метод с использованием WScript и планировщика заданий, который требует примерно нужного количества времени для создания точки, а затем сообщает «создано», но при проверке списка точек восстановления системы в Win8 ничего нет. Но, опять же, этот процесс работает в Win7 и правильно показывает созданную точку.

Я также нашел это в VB и C, которые находятся за пределами мои способности конвертировать в Delphi версии 5.

Может ли кто-нибудь указать мне код, который позволит мне завершить этот проект? Это для моего собственного использования, поэтому оно может быть немного грубым и готовым, пока оно работает с Win8.

Хорошо, как я прокомментировал ниже, вот что я сделал, чтобы попытаться диагностировать проблему.

program Project2;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj;

procedure  CreateRestorePoint(const Description : string);
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  BEGIN_SYSTEM_CHANGE = 100;
  APPLICATION_INSTALL = 0;
var
  FSWbemLocator   : OLEVariant;
  FWMIService     : OLEVariant;
  FWbemObjectSet  : OLEVariant;
begin
  WriteLn('2a');
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WriteLn('2b');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\DEFAULT', WbemUser, WbemPassword);
  WriteLn('2c');
  FWbemObjectSet:= FWMIService.Get('SystemRestore');
  WriteLn('2d');
  Writeln(FWbemObjectSet.CreateRestorePoint(Description, APPLICATION_INSTALL, BEGIN_SYSTEM_CHANGE));  //
  WriteLn('2e');
end;


begin
 try
    WriteLn('1');
    CoInitialize(nil);
    try
      WriteLn('2');
      CreateRestorePoint('Sample restore point');
    finally
      WriteLn('3');
      CoUninitialize;
    end;
 except
    on E:EOleException do
    begin
      WriteLn('4');
      Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    end;
    on E:Exception do
    begin
      WriteLn('5');
      Writeln(E.Classname, ':', E.Message);
    end;
  end;
 Writeln('Press Enter again to exit');
 Readln;
end.

И вот что из этого вышло...

1
2
2a
2b
2c
2d
0
2e
3
Press Enter again to exit

Ответы:


1

Вы можете использовать CreateRestorePoint из SystemRestore класс WMI

Попробуйте этот образец

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj;

procedure  CreateRestorePoint(const Description : string);
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  BEGIN_SYSTEM_CHANGE = 100;
  APPLICATION_INSTALL = 0;
var
  FSWbemLocator   : OLEVariant;
  FWMIService     : OLEVariant;
  FWbemObjectSet  : OLEVariant;
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\DEFAULT', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.Get('SystemRestore');
  Writeln(FWbemObjectSet.CreateRestorePoint(Description, APPLICATION_INSTALL, BEGIN_SYSTEM_CHANGE));  //
end;


begin
 try
    CoInitialize(nil);
    try
      CreateRestorePoint('Sample restore point');
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
  end;
 Writeln('Press Enter to exit');
 Readln;
end.

Примечание. Для этого кода требуется повышение прав.

07.12.2013
  • Спасибо, к сожалению, не работает. Используя командную строку с повышенными привилегиями, консольная программа мгновенно возвращается с помощью 0. Нажмите Enter, чтобы выйти, и при проверке списка точек восстановления новой записи нет. Я создам ответ здесь и покажу изменения кода и результаты после того, как я добавил writelns, чтобы посмотреть, поможет ли это кому-нибудь диагностировать проблему. Еще раз спасибо за стартовую помощь. 08.12.2013
  • Если метод CreateRestorePoint возвращает 0, это означает, что точка восстановления была создана. Итак, как вы перечисляете существующие точки восстановления? 08.12.2013
  • Спасибо, что посмотрели его, но он мгновенно возвращает этот ноль, поэтому фактическая точка восстановления не создается, поскольку обычно для ее создания требуется около 6 секунд. Чтобы увидеть список, я использую Панель управления -> Восстановление -> Открыть восстановление системы -> Далее -> Показать больше точек восстановления. Список отображается для точек, которые я создал вручную с помощью Панели управления -> Восстановление -> Настроить восстановление системы -> Создать. 10.12.2013
  • Это странно, вы можете запустить эту команду Get-ComputerRestorePoint из экземпляра PowerShell с повышенными правами? 10.12.2013
  • Получил сообщение об ошибке «Windows PowerShell Copyright (C) 2012 Microsoft Corporation. Все права защищены. PS C:\Users\Admin› Get-ComputerRestorePoint Get-ComputerRestorePoint : Доступ запрещен В строке: 1 символ: 1+ Get-ComputerRestorePoint + CategoryInfo : InvalidOperation: (:) [Get-ComputerRestorePoint], ManagementException + FullyQualifiedErrorId : GetWMIManagementException, Microsoft. PowerShell.Commands.GetComputerRestorePointCommand ' 10.12.2013
  • Вы должны запустить PowerShell от имени администратора. 10.12.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: wedx@cp9.ru