使用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
答案 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.
注意:此代码需要提升。