Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 580

Профиль | Отправить PM | Цитировать


Здравствуйте, возникла сегодня у меня такая задача, как создать точку восстановления перед установкой программы.
Для этого можно конечно воспользоваться скриптом .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;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:50, 01-04-2011 | #1205