Используя D5, я хотел бы иметь приложение, которое создает точку восстановления системы с описанием. Я нашел несколько бесплатных онлайн-игр, но они не работают с Win8, но они работают с Win7.Как установить точки восстановления системы в Win8
Я нашел this question, у меня есть половина пути к выполнению того, что мне нужно, так как оно работает с Win8 при компиляции и запуске «Как администратор».
Я также нашел страницу в MSDN, которая описывает метод с использованием WScript и планировщика заданий, который занимает нужное количество времени для создания точки, затем создает отчеты «созданный», но при проверке списка точек восстановления системы нет ничего там в Win8. Но опять же этот процесс действительно работает в Win7 и правильно показывает созданную точку.
Я также found this в 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
Спасибо, к сожалению, не работает. Используя командную подсказку с повышенными правами, консольная программа мгновенно возвращается с «0 Нажмите« Ввод для выхода »), и при проверке списка точек восстановления нет новой записи. Я создам ответ здесь и покажу изменения и результаты кода после того, как я добавил writelns, чтобы узнать, поможет ли это кому-либо диагностировать проблему. Еще раз спасибо за помощь. – user3046760
Если метод 'CreateRestorePoint' возвращает' 0', означает, что была создана точка восстановления. Итак, как вы указываете существующие точки восстановления? – RRUZ
Спасибо, что посмотрели на него, но он мгновенно возвращает этот нуль, так что фактическая точка восстановления не создается, поскольку для ее создания требуется около 6 секунд. Чтобы увидеть список, я использую Панель управления -> Восстановление -> Открыть восстановление системы -> Далее -> Показать дополнительные точки восстановления. Список отображается для точек, которые я создал вручную, с помощью панели управления -> Восстановление -> Настройка восстановления системы -> Создать. – user3046760