gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:27:17 25 4
gpt4 key购买 nike

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

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

我还在MSDN上找到了一个页面,该页面描述了使用WScript和Task Scheduler的方法,该方法花费正确的时间创建点,然后报告“已创建”,但是在检查系统还原点列表时,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

最佳答案

您可以使用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.


注意:此代码需要提升。

关于delphi - 如何在Win8中设置系统还原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com