Как установить точки восстановления системы в Win8
Используя 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
1 ответ
Вы можете использовать CreateRestorePoint
от SystemRestore
Класс WMI
Попробуйте этот образец
{$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.
Примечание. Этот код требует повышения прав.