Здравствуйте, возникла сегодня у меня такая задача, как создать точку восстановления перед установкой программы.
Для этого можно конечно воспользоваться скриптом .vbs, смущает одно, сохраняем лишний файл на диск, затем запускаем...
Одним словом решил это дело реализовать без сохранения на диск:
SetRestorePoint
Код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
rus.otherGroup=Прочее:
rus.pointDesc=Создать системную контрольную точку (рекомендуется)
rus.pointMsg=Создание контрольной точки...
[Tasks]
Name: restorepoint; Description: {cm:pointDesc}; GroupDescription: {cm:otherGroup}; MinVersion: 0,5.1
[Files]
Source: compiler:Examples\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
[Code]
{===============================================================================}
{ Script name: SetRestorePoint.iss }
{ Script version: 1.0 }
{ Author: Serega, http://forum.oszone.net/member.php?userid=88670 }
{ }
{ This script shows how to create restore point before install }
{ Этот скрипт показывает, как создать контрольную точку перед установкой }
{ }
{ function SetRestorePoint(const PointName: string): Boolean; }
{===============================================================================}
const
// Description http://msdn.microsoft.com/en-us/library/aa378847%28VS.85%29.aspx
// Restore point type
APPLICATION_INSTALL = 0;
APPLICATION_UNINSTALL = 1;
DEVICE_DRIVER_INSTALL = 10;
MODIFY_SETTINGS = 12;
CANCELLED_OPERATION = 13;
// Event type
BEGIN_SYSTEM_CHANGE = 100;
END_SYSTEM_CHANGE = 101;
BEGIN_NESTED_SYSTEM_CHANGE = 102;
END_NESTED_SYSTEM_CHANGE = 103;
function SetRestorePoint(const PointName: string): Boolean;
var
vObj, SR: Variant;
begin
vObj := CreateOleObject('ScriptControl');
vObj.Language := 'VBScript';
SR := vObj.eval('GetObject("winmgmts:\\.\root\default:SystemRestore")');
Result := SR.CreateRestorePoint(PointName, APPLICATION_INSTALL, BEGIN_SYSTEM_CHANGE) = 0;
end;
procedure CurPageChanged(CurPageID: Integer);
var
msg: string;
begin
if (CurPageID = wpInstalling) and IsTaskSelected('restorepoint') then
try
msg := WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption := ExpandConstant('{cm:pointMsg}');
WizardForm.Repaint;
// создаём контрольную точку
SetRestorePoint('Установка {#SetupSetting("AppName")}');
WizardForm.StatusLabel.Caption := msg;
finally
SetLength(msg, 0);
end;
end;