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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 3]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 3]

Ветеран


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


Конфигурация

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


Изменения
Автор: Serega
Дата: 13-08-2011
Вложения
Тип файла: 7z Inno Setup [все вопросы] часть 1.7z
(1.34 Mb, 898 просмотров)
Тип файла: 7z Inno Setup [все вопросы] часть 2.7z
(3.12 Mb, 796 просмотров)
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2

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


Отправлено: 00:28, 04-11-2010

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


newmangor, удали флаг nowait - он заставляет не ожидать окончания предидущего запуска. И внимательно читаем справку - даже в русской это есть.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 11:00, 31-03-2011 | #1201



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


мб я не ту справку читаю ? ссылку мона или докум ? спс еще раз выручил !

Отправлено: 12:37, 31-03-2011 | #1202


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Не знаю, насколько актуально, минимизация инсталла на странице инсталляции в правый нижний угол с корректным отображением на любом мониторе, с отключенным задним фоном.
читать дальше »
[Setup]
AppName=Avengerz
AppVerName=Avengerz
AppVersion=Avengerz
DefaultDirName={pf}\Avengerz
DefaultGroupName=Avengerz

[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external deleteafterinstall

[code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-GetSystemMetrics(16)+ ScaleX(5);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end;
На базе примера от Avengerz

Цитата Serega:
необходимо соединение с интернетом »
А если нет интернета, то нет и внешнего IP

Последний раз редактировалось Gnom_aka_Lexander, 31-03-2011 в 22:38.


Отправлено: 13:43, 31-03-2011 | #1203


Ветеран


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

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


Здравствуйте, накидал скрипт, как можно узнать IP адрес машины, на которой запущен инсталлятор (необходимо соединение с интернетом):
Пример

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Code]
{===============================================================================}
{ Script name: GetMyIP.iss                                                      }
{ Script version: 1.0                                                           }
{ Author: Serega, http://forum.oszone.net/member.php?userid=88670               }
{                                                                               }
{ This script shows how to learn your IP                                        }
{ Этот скрипт показывает, как узнать свой IP                                    }
{===============================================================================}
var
  pnl: TPanel;
  lbl: TLabel;
  Memo: TMemo;
  Button: TButton;

function GetHtmlSource(const url: string): string;
var
  vHttp: Variant;
begin
  try
    vHttp := CreateOleObject('Microsoft.XMLHTTP');
    vHttp.open('GET', url, False);
    vHttp.send;
    Result := vHttp.responseText;
  except
    Result := 'Возникла ошибка при обращении к серверу, проверьте настройки соединения.';
  end;
end;

procedure ButtonClick(Sender: TObject);
var
  strHtml: string;
begin
  try
    Memo.Clear;
    lbl.Caption := '';
    strHtml := GetHtmlSource('http://2ip.ru/');
    Memo.Lines.Text := strHtml;
    if (strHtml <> '') and (Pos('ошибка', Copy(strHtml, 1, 20)) = 0) then
      begin
        Delete(strHtml, 1, Pos('class="ip"', strHtml));
        Delete(strHtml, 1, Pos('<big', strHtml));
        Delete(strHtml, 1, Pos('>', strHtml));
        SetLength(strHtml, Pos('<', strHtml)-1);
        lbl.Caption := 'Ваш IP адрес: ' + Trim(strHtml);
      end;
  finally
    SetLength(strHtml, 0);
  end;
end;

procedure InitializeWizard();
begin
  pnl := TPanel.Create(WizardForm);
  with pnl do
    begin
      Parent := WizardForm;
      Left := 0;
      Top := 0;
      Align := alClient;
    end;
  WizardForm.CancelButton.Parent := pnl;

  with TLabel.Create(WizardForm) do
    begin
      Parent := pnl;
      AutoSize := True;
      Left := ScaleX(15);
      Top := ScaleY(10);
      Caption := 'Исходный код страницы (http://2ip.ru/):';
    end;

  Memo := TMemo.Create(WizardForm);
  with Memo do
    begin
      Parent := pnl;
      SetBounds(ScaleX(15), ScaleY(30), WizardForm.ClientWidth - ScaleX(30), ScaleY(285));
      ReadOnly := True;
      ScrollBars := ssBoth;
      Text := '';
    end;

  Button := TButton.Create(WizardForm);
  with Button do
    begin
      Parent := pnl;
      SetBounds(ScaleX(300), WizardForm.CancelButton.Top, ScaleX(85), ScaleY(23));
      Caption := 'Узнать IP';
      OnClick := @ButtonClick;
    end;

  lbl := TLabel.Create(WizardForm);
  with lbl do
    begin
      Parent := pnl;
      AutoSize := True;
      Left := ScaleX(25);
      Top := ScaleY(328);
      Font.Size := 12;
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.CancelButton.Caption := 'Закрыть';
end;

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


Последний раз редактировалось Serega, 31-03-2011 в 22:27. Причина: оптимизация: исправил с (Pos('ошибка', strHtml) = 0) на (Pos('ошибка', Copy(strHtml, 1, 20)) = 0)

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

Отправлено: 20:56, 31-03-2011 | #1204


Ветеран


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

Профиль | Отправить 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


Аватара для mariolast

Ветеран


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

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


Цитата Лександер:
На руборде отвечали, там можно и айпи взять, если я правильно понял.вот Там вроде сохраняется ини с параметрами сетевухи и из него считывается нужная информация.
Есть засада, если стоит роутер, то получим ip, который выдает роутер. Обойти можно подключившись к какому-нибудь сайту, например 2ip.ru, и считать ip с него.
Чуть позже:
Простенький инсталл, без претензий на высокие оценки, но достаточно симпатичный »
Тяжеловато выходит.
Если у меня виртуальная машина то появляется как минимкм еще 2 сетевых адаптера. А мне нужно мой физический вычислить.
Пробовал так
Код: Выделить весь код
function GetMACAddress(): string;
var
  ResultCode: Integer;
  strArray: TArrayOfString;
  Temp: string;
  strMAC: string;
  strLen: integer;
  i: integer;
begin
  Result:= '';
  Exec('cmd.exe', '/c ipconfig /all >> ' + ExpandConstant('{tmp}\adapter.info'), '', SW_HIDE,
     ewWaitUntilTerminated, ResultCode);

  LoadStringsFromFile(ExpandConstant('{tmp}\adapter.info'), strArray);
  for i := 1 to GetArrayLength(strArray)-1 do begin
    strLen:= Length(strArray[i]);
    Temp:=strArray[i-1];
    if strLen > 16 then
    begin
//    MsgBox(IntToStr(Pos('VMware', Temp)), mbInformation, MB_OK);
    MsgBox(Temp, mbInformation, MB_OK);
    if (CompareStr('-', strArray[i][strLen-2] ) = 0) and
       (CompareStr('-', strArray[i][strLen-5] ) = 0) and
       (CompareStr('-', strArray[i][strLen-8] ) = 0) and
       (CompareStr('-', strArray[i][strLen-11]) = 0) and
       (CompareStr('-', strArray[i][strLen-14]) = 0) and
       (Pos('VMware', Temp) = 0) and
       (Pos('Hamachi', Temp) = 0) then
      Result:= Result + #10#13 + Copy(strArray[i], strLen-16, 17);
     end;
  end;
end;
В результате, на 7-ке как то работает, на XP нет. Для информации отладки смотрю переменную Temp, в 7-ке все что русскими выводится на экран крякозябрами (можно ли это поправить не знаю). На XP ее значение вообще пустое....

Отправлено: 09:56, 01-04-2011 | #1206


Аватара для mariolast

Ветеран


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

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


Цитата Serega:
скрипт, как можно узнать IP адрес машины, на которой запущен инсталлятор »
Я для этого использую библиотеку IPUtils.dll

Отправлено: 10:27, 01-04-2011 | #1207


Ветеран


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

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


Цитата mariolast:
(можно ли это поправить не знаю) »
Можно, используйте конвертирование strArray[i] := DosToAnsi(strArray[i]), чуть поправил ваш пример:
читать дальше »

Код: Выделить весь код
#include "ConvertString.iss"

function GetMACAddress(): string;
var
  ResultCode: Integer;
  strArray: TArrayOfString;
  Temp: string;
  strMAC: string;
  strLen: integer;
  i: integer;
begin
  Result := '';
  Exec('cmd.exe', '/c ipconfig /all >"' + ExpandConstant('{tmp}\adapter.info') + '"', '', SW_HIDE,
     ewWaitUntilTerminated, ResultCode);

  LoadStringsFromFile(ExpandConstant('{tmp}\adapter.info'), strArray);
  for i := 0 to GetArrayLength(strArray)-1 do
    if Length(strArray[i]) > 16 then
      begin
        strArray[i] := DosToAnsi(strArray[i]);
        strLen := Length(strArray[i]);
        MsgBox(strArray[i], mbInformation, MB_OK);
        if (CompareStr('-', strArray[i][strLen-2] ) = 0) and
           (CompareStr('-', strArray[i][strLen-5] ) = 0) and
           (CompareStr('-', strArray[i][strLen-8] ) = 0) and
           (CompareStr('-', strArray[i][strLen-11]) = 0) and
           (CompareStr('-', strArray[i][strLen-14]) = 0) and
           (Pos('VMware', strArray[i]) = 0) and
           (Pos('Hamachi', strArray[i]) = 0) then
          Result := Result + #10#13 + Copy(strArray[i], strLen-16, 17);
      end;
end;

Сам скрипт ConvertString.iss - здесь

Цитата mariolast:
Я для этого использую библиотеку IPUtils.dll »
А вы думаете как она проверяет IP? Смысл один и тот же, только не нужно доп. библиотек.

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

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

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


Аватара для mariolast

Ветеран


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

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


Serega,
Ну это уже что то, уже читает под ХП текстовый файл, хоть и русские буквы крякозябрами все равно, но пока это не столь важно. Спасибо.

Отправлено: 11:45, 01-04-2011 | #1209


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата Serega:
Можно, используйте конвертирование strArray[i] := DosToAnsi(strArray[i]), чуть поправил ваш пример:
читать дальше » »
Этот скрипт на семерке и хр правильно отрабатывает? ведь в семере слегка по другому вывод ipconfig сделан

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:49, 01-04-2011 | #1210



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 3]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход