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