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

Ответить
 • Просмотры: 14
Аватара пользователя
STRAYKER

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение STRAYKER »

STRAYKER,

на держи, думай что делаешь в следующий раз.

Я тебе там все секции объединил, левак отрезал, DeinitializeSetup и InitializeSetup поправил.
Вложения
joined-2.rar
(1.9 КБ) 0 скачиваний
joined-2.rar
(1.9 КБ) 0 скачиваний
Аватара пользователя
STRAYKER

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение STRAYKER »

Всеравно, я вам даю исходники может вы розберётесь бо я чайник в них

Нет неработает

У меня Inno Ultra 5.4.1 может что-то в нем ?

O_o Удалил скрипт со скином и заработало
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение Gnom_aka_Lexander »

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

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение STRAYKER »

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


читать дальше »


[Setup]

AppName=Avengerz

AppVerName=Avengerz

AppVersion=Avengerz

DefaultDirName={pf}\Avengerz

DefaultGroupName=Avengerz



[Files]

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


Код: Выделить всё


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; 

На базе примера от [b]Avengerz[/b]




				Цитата [b]Serega[/b]:
	
	
		
				необходимо соединение с интернетом [url=viewtopic.php?p=2799628#p2799628]»[/url]
		
	
	
А если нет интернета, то нет и внешнего IP [img]images/smilies/new/smile.gif[/img]
Аватара пользователя
STRAYKER

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение STRAYKER »

Здравствуйте, накидал скрипт, как можно узнать 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;
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

Здравствуйте, возникла сегодня у меня такая задача, как создать точку восстановления перед установкой программы.

Для этого можно конечно воспользоваться скриптом .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;
Аватара пользователя
david141

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение david141 »

Цитата Лександер:



На руборде отвечали, там можно и айпи взять, если я правильно понял.вот Там вроде сохраняется ини с параметрами сетевухи и из него считывается нужная информация.

Есть засада, если стоит роутер, то получим ip, который выдает роутер. Обойти можно подключившись к какому-нибудь сайту, например 2ip.ru, и считать ip с него.

Чуть позже:

Простенький инсталл, без претензий на высокие оценки, но достаточно симпатичный
Скрипты Inno Setup. Помощь и советы [часть 3]




Тяжеловато выходит.

Если у меня виртуальная машина то появляется как минимкм еще 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 ее значение вообще пустое....
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

Цитата Serega:



скрипт, как можно узнать IP адрес машины, на которой запущен инсталлятор
Скрипты Inno Setup. Помощь и советы [часть 3]




Я для этого использую библиотеку IPUtils.dll
Аватара пользователя
david141

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение david141 »

Цитата mariolast:



(можно ли это поправить не знаю)
Скрипты Inno Setup. Помощь и советы [часть 3]




Можно, используйте конвертирование strArray := DosToAnsi(strArray), чуть поправил ваш пример:


читать дальше »






Код:

Код: Выделить всё

#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 -
Скрипты Inno Setup. Помощь и советы [часть 3]





Цитата mariolast:



Я для этого использую библиотеку IPUtils.dll
Скрипты Inno Setup. Помощь и советы [часть 3]




А вы думаете как она проверяет IP? Смысл один и тот же, только не нужно доп. библиотек.
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

Serega,

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

Вернуться в «Автоматическая установка приложений»