【问题标题】:How to set System Restore points in Win8Win8如何设置系统还原点
【发布时间】:2013-12-07 15:17:53
【问题描述】:

使用 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

【问题讨论】:

    标签: delphi delphi-5 system-restore


    【解决方案1】:

    您可以使用SystemRestore WMI 类中的CreateRestorePoint

    试试这个示例

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

    注意:此代码需要提升。

    【讨论】:

    • 谢谢,遗憾的是,这不起作用。使用提升的命令提示符,控制台程序会立即返回“0 Press Enter to exit”,并且在检查还原点列表时没有新条目。我将在这里创建一个答案,并在我添加 writelns 后显示代码更改和结果,看看这是否可以帮助任何人诊断问题。再次感谢您的帮助。
    • 如果CreateRestorePoint方法返回0,表示创建了哪个还原点。那么如何列出现有的还原点?
    • 感谢您查看它,但它会立即返回零,因此没有创建实际的还原点,因为创建一个还原点通常需要大约 6 秒。要查看列表,我使用控制面板 -> 恢复 -> 打开系统还原 -> 下一步 -> 显示更多还原点。该列表显示了我使用控制面板 -> 恢复 -> 配置系统还原 -> 创建手动创建的点。
    • 这很奇怪,你能从提升的 PowerShell 实例运行这个命令Get-ComputerRestorePoint 吗?
    • 收到错误“Windows PowerShell 版权所有 (C) 2012 Microsoft Corporation。版权所有。 PS C:\Users\Admin> Get-ComputerRestorePoint Get-ComputerRestorePoint : Access denied At line:1 char:1+ Get-ComputerRestorePoint + CategoryInfo : InvalidOperation: (:) [Get-ComputerRestorePoint], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft。 PowerShell.Commands.GetComputerRestorePointCommand '
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多