Как установить точки восстановления системы в 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.

Примечание. Этот код требует повышения прав.

Другие вопросы по тегам