如何在Win8中设置系统还原点

时间:2013-12-07 15:17:53

标签: delphi delphi-5 system-restore

使用D5,我想要一个创建带有描述的系统还原点的应用程序。我在网上找到了几个免费赠品,但它们不适用于Win8,但它们可以与Win7一起使用。

我找到了this question,它让我完成了我需要做的一半,因为它在编译时运行Win8并以“管理员身份运行”。

我还在MSDN上找到了一个页面,该页面描述了一个使用WScript和任务计划程序的方法,它花费大量时间来创建一个点,然后报告“已创建”,但在检查系统还原点列表时没有任何内容在Win8中。但是,这个过程再次在Win7中工作并正确显示创建的点。

我在VB和C中也found this,这些都超出了我转换为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 个答案:

答案 0 :(得分:4)

您可以使用CreateRestorePoint WMI类

中的SystemRestore

试试这个样本

{$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.

注意:此代码需要提升。