Как создать точку восстановления системы каждый раз, когда запускается мой установщик?
По умолчанию MSI создает точку восстановления системы для установки и удаления. Что мне нужно делать, чтобы создать точку восстановления системы при каждом запуске моего установщика, будь то установка, восстановление, удаление, обновление и т. Д.?
2 ответа
Вот функция, которую вы можете использовать
function CreateRestorePoint(sDescription: String): Boolean;
var
ScriptControl: Variant;
oWMI: Variant;
ErrCode: Integer;
begin
try
// Create the ScriptControl object.
ScriptControl := CreateOleObject('ScriptControl');
// Set the Language property (VBScript or JavaScript)
ScriptControl.Language := 'VBScript';
// Now create the WMI object we could not with straight Pascal code.
oWMI := ScriptControl.Eval('GetObject("winmgmts:\\.\root\default:Systemrestore")');
WizardForm.StatusLabel.Caption := 'Creating restore point...';
// Create the restore point.
ErrCode := oWMI.CreateRestorePoint(sDescription, 0, 100);
// Return the error code, if any. A value of zero indicates success.
Result := (ErrCode = 0);
except
Result := false;
end;
end;
Подробнее здесь читайтеhttps://github.com/matlo/GIMX-build/blob/master/windows/inno.iss.
Что ж, обновление - это новая установка нового продукта, при условии, что вы имеете в виду серьезное обновление, поэтому вам не нужно об этом беспокоиться, так как установка создаст его при запуске.
Удаление не часто является проблемой, если у пользователя все еще есть источник установки и доступ к любым обновлениям, потому что он может просто переустановить продукт.
В любом случае вам нужно кодировать его с помощью API точки восстановления, начиная с этого:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa378727(v=vs.85).aspx
и я не знаю, работает ли он из пользовательского действия. Если этого не произойдет, то вам нужно будет обернуть эти операции в исполняемый файл, который создает точку восстановления, а затем запускает MSI.
Если пользователь отключил восстановление системы, то, очевидно, ничего из этого не сработает.