2013-12-07 3 views
2

Используя 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 

ответ

4

Вы можете использовать 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. 

Примечание: Этот код требует повышения.

+0

Спасибо, к сожалению, не работает. Используя командную подсказку с повышенными правами, консольная программа мгновенно возвращается с «0 Нажмите« Ввод для выхода »), и при проверке списка точек восстановления нет новой записи. Я создам ответ здесь и покажу изменения и результаты кода после того, как я добавил writelns, чтобы узнать, поможет ли это кому-либо диагностировать проблему. Еще раз спасибо за помощь. – user3046760

+0

Если метод 'CreateRestorePoint' возвращает' 0', означает, что была создана точка восстановления. Итак, как вы указываете существующие точки восстановления? – RRUZ

+0

Спасибо, что посмотрели на него, но он мгновенно возвращает этот нуль, так что фактическая точка восстановления не создается, поскольку для ее создания требуется около 6 секунд. Чтобы увидеть список, я использую Панель управления -> Восстановление -> Открыть восстановление системы -> Далее -> Показать дополнительные точки восстановления. Список отображается для точек, которые я создал вручную, с помощью панели управления -> Восстановление -> Настройка восстановления системы -> Создать. – user3046760

Смежные вопросы