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

Ответить
 • Просмотры: 39
Аватара пользователя
R.i.m.s.k.y.

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

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

elmariacci,
Цитата elmariacci:



необходима проверка в реестре на наличие в системе Microsoft .NET Framewok 3.5 (именно 3.5, а не 4+)
Скрипты Inno Setup. Помощь и советы [часть 5]




касательно фреимворка: версия выше 3.5 содержит его в себе, поэтому имеются и соответствующие ключи для ... 3.5, 4.0 ...

можешь забить на "именно 3.5, а не 4+", те тебе нужно от 3.5 и выше

реализовал для фреиворка нужную тебе проверку, но я без понятия что такое Dokan.dll и где она должна лежать. Короче смотри пример. Думаю дальше сам разберёшься




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




Код:

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

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: comp; Description: I Need Net3.5; Types: full custom;
[Run]
Filename: {app}\dotNetFx35setup.exe; Parameters: /q /norestart; Description: Install Net v3.9; Flags: waituntilterminated; Check: NeedInstall('Net3.5');
Filename: {app}\Dokan.exe; Parameters: ; Description: Install Dokan.dll; Flags: waituntilterminated; Check: NeedInstall('Dokan.dll');
[code]
function NeedInstall(const InputParam: String): boolean;
begin
  case InputParam of
    'Net3.5': Result := IsComponentSelected('comp') and not RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Microsoft\NET Framework Setup\NDP\v3.5');
    'Dokan.dll': Result := not FileExists(ExpandConstant('{app}\Dokan.dll'));
  end;
end;







==================================================================================================== =



insombia, извиняй, срепов не знаю, помочь не могу
Аватара пользователя
R.i.m.s.k.y.

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

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

Ладно переформулируем вопрос: как создать свою страницу c чекбоксами перед wpFinished и на nextButtonClick своей страницы повесить свое действие?
Аватара пользователя
R.i.m.s.k.y.

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

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

Mailchik, хорошо только кнопка "назад" после установки не к месту
Аватара пользователя
Vstanka

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

Сообщение Vstanka »

alert30, попробовала еще такой вариант:





Код:

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

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program
[_Code]
const
  PING_TIMEOUT             = 500;
  INADDR_NONE              = $FFFFFFFF;
  SOCKET_ERROR             = (-1);
  IP_SUCCESS               = 0;
  IP_BUF_TOO_SMALL         = (11000 + 1);
  IP_DEST_NET_UNREACHABLE  = (11000 + 2);
  IP_DEST_HOST_UNREACHABLE = (11000 + 3);
  IP_DEST_PROT_UNREACHABLE = (11000 + 4);
  IP_DEST_PORT_UNREACHABLE = (11000 + 5);
  IP_NO_RESOURCES          = (11000 + 6);
  IP_BAD_OPTION            = (11000 + 7);
  IP_HW_ERROR              = (11000 + 8);
  IP_PACKET_TOO_BIG        = (11000 + 9);
  IP_REQ_TIMED_OUT         = (11000 + 10);
  IP_BAD_REQ               = (11000 + 11);
  IP_BAD_ROUTE             = (11000 + 12);
  IP_TTL_EXPIRED_TRANSIT   = (11000 + 13);
  IP_TTL_EXPIRED_REASSEM   = (11000 + 14);
  IP_PARAM_PROBLEM         = (11000 + 15);
  IP_SOURCE_QUENCH         = (11000 + 16);
  IP_OPTION_TOO_BIG        = (11000 + 17);
  IP_BAD_DESTINATION       = (11000 + 18);
  IP_ADDR_DELETED          = (11000 + 19);
  IP_SPEC_MTU_CHANGE       = (11000 + 20);
  IP_MTU_CHANGE            = (11000 + 21);
  IP_UNLOAD                = (11000 + 22);
  IP_ADDR_ADDED            = (11000 + 23);
  IP_GENERAL_FAILURE       = (11000 + 50);
  IP_PENDING               = (11000 + 255);
type
  ICMP_OPTIONS = record
    Ttl         : Byte;
    Tos         : Byte;
    Flags       : Byte;
    OptionsSize : Byte;
    OptionsData : Longint;
  end;
  ICMP_ECHO_REPLY = record
    Address       : Longint;
    status        : Longint;
    RoundTripTime : Longint;
    DataSize      : Longint;
    Reserved      : Integer;
    DataPointer   : Longint;
    Options       : ICMP_OPTIONS;
    Data          : string;
  end;
function IcmpCreateFile(): HWND;
external 'IcmpCreateFile@icmp.dll stdcall';
function IcmpCloseHandle(IcmpHandle: Longint): Longint;
external 'IcmpCloseHandle@icmp.dll stdcall';
function IcmpSendEcho(IcmpHandle: HWND;
                      DestinationAddress: Longint;
                      RequestData: string;
                      RequestSize: Longint;
                      RequestOptions: Longint;
                      var ReplyBuffer: ICMP_ECHO_REPLY;
                      ReplySize: Longint;
                      Timeout: Longint): Longint;
external 'IcmpSendEcho@icmp.dll stdcall';
function inet_addr(sAddr: string): Longint;
external 'inet_addr@wsock32.dll stdcall';
function GetPingResult(status: Longint): string;
begin
  case status of
    IP_SUCCESS:               Result:= 'Ping IP: success';
    IP_BUF_TOO_SMALL:         Result:= 'Ping IP: buf too small';
    IP_DEST_NET_UNREACHABLE:  Result:= 'Ping IP: destination net unreachable';
    IP_DEST_HOST_UNREACHABLE: Result:= 'Ping IP: destination host unreachable';
    IP_DEST_PROT_UNREACHABLE: Result:= 'Ping IP: destination protocol unreachable';
    IP_DEST_PORT_UNREACHABLE: Result:= 'Ping IP: destination port unreachable';
    IP_NO_RESOURCES:          Result:= 'Ping IP: no resources';
    IP_BAD_OPTION:            Result:= 'Ping IP: bad option';
    IP_HW_ERROR:              Result:= 'Ping IP: hardware error';
    IP_PACKET_TOO_BIG:        Result:= 'Ping IP: packet too big';
    IP_REQ_TIMED_OUT:         Result:= 'Ping IP: request timed out';
    IP_BAD_REQ:               Result:= 'Ping IP: bad request';
    IP_BAD_ROUTE:             Result:= 'Ping IP: bad route';
    IP_TTL_EXPIRED_TRANSIT:   Result:= 'Ping IP: ttl expired transit';
    IP_TTL_EXPIRED_REASSEM:   Result:= 'Ping IP: ttl expired reassem';
    IP_PARAM_PROBLEM:         Result:= 'Ping IP: parameter problem';
    IP_SOURCE_QUENCH:         Result:= 'Ping IP: source quench';
    IP_OPTION_TOO_BIG:        Result:= 'Ping IP: option too big';
    IP_BAD_DESTINATION:       Result:= 'Ping IP: bad destination';
    IP_ADDR_DELETED:          Result:= 'Ping IP: address deleted';
    IP_SPEC_MTU_CHANGE:       Result:= 'Ping IP: spec mtu change';
    IP_MTU_CHANGE:            Result:= 'Ping IP: mtu change';
    IP_UNLOAD:                Result:= 'Ping IP: unload';
    IP_ADDR_ADDED:            Result:= 'Ping IP: address added';
    IP_GENERAL_FAILURE:       Result:= 'Ping IP: general failure';
    IP_PENDING:               Result:= 'Ping IP: pending';
    INADDR_NONE:              Result:= 'Ping IP: bad IP format';
    SOCKET_ERROR:             Result:= 'Ping IP: can''t open port';
  else                        Result:= 'Unknown  status';
  end;
end;
function Ping(sAddr, sendData: string): Longint;
var
  hPort: HWND;
  dwAddr: Longint;
  ECHO: ICMP_ECHO_REPLY;
begin
  dwAddr:= inet_addr(sAddr);
  if dwAddr  INADDR_NONE then
    begin
      hPort:= IcmpCreateFile();
      if hPort  0 then
        begin
          IcmpSendEcho(hPort, dwAddr, sendData, Length(sendData),
                       0, ECHO, SizeOf(ECHO), PING_TIMEOUT);
          IcmpCloseHandle(hPort);
          Result:= ECHO.status;
        end
        else Result:= SOCKET_ERROR;
    end
    else Result:= INADDR_NONE;
end;
procedure InitializeWizard();
var
  str: string;
  res: Longint;
begin
  res:= Ping('172.31.100.1', 'test');
  str:= GetPingResult(res);
  MsgBox(str, mbInformation, MB_OK);
end;

Но какой бы адрес ни вводила - всегда успешное выполнение.. странно..
Аватара пользователя
Raf-9600

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

Сообщение Raf-9600 »

Ктонить подскажет код, чтобы инсталлятор через 10 секунд после своего запуска, распаковал в temp и запустил определённый exe?



exe-шник из папки temp ведь сможет скачать из интернета пару килобайт инфы в оперативу?
Аватара пользователя
Mailchik

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

Сообщение Mailchik »

Raf-9600,
читать дальше »




Код:

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

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: MyProg.exe; Flags: dontcopy;
[Code]
var
 ResultCode: integer;
procedure MyTimer(Sender: TObject); //Таймер, который сработает через 10 секунд
 begin
  ExtractTemporaryFile('MyProg.exe'); //Распаковываем нужный exe
  Exec(ExpandConstant('{tmp}\MyProg.exe'), '', 
    ExpandConstant('{tmp}'), SW_SHOW, ewNoWait, ResultCode); //Запускаем exe
  TTimer(Sender).Enabled := False; //Вырубаем таймер
end;
procedure InitializeWizard;
 begin
  with TTimer.Create(nil) do begin //Создаём таймер
   Interval := 10000;
   Enabled := True;
   OnTimer := @MyTimer;
  end;
end;
Аватара пользователя
Vstanka

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

Сообщение Vstanka »

Не подскажете, как сделать, чтобы в секции Run была задержка выполнения команды? Т.е. у меня предлагается пользователю выбрать запуск сервера БД и запуск приложения, чтобы запуск приложения осуществлялся чуть позже или после запуска сервера. Флаг waituntilterminated не подходит, т.к. сервер должен оставаться запущенным.. И от пользователя тоже не нужно ждать никаких действий.
Аватара пользователя
R.i.m.s.k.y.

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

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

audiofeel, дай исходник с файлами, посмотрю что не так


Цитата audiofeel:



заброшу я его или сделаю на "адвансед инсталлер 9.8"
Скрипты Inno Setup. Помощь и советы [часть 5]




не советую менять инно на всякую фигню

инно - это тот же объект-паскаль/делфи - то бишь язык программирования, хотя и нехило урезанный. Думаю о проистекающих отсюда возможностях нетрудно догадаться (сейчас те кто знают СИ и ассемблер посмеются). Переломайся, изучи и не пожалеешь!

вот тебе демо возможностей (далеко не всех):

1.
http://sendfile.su/748778


2:
http://sendfile.su/748248


скачай, положи обе программы рядом, поиграйся и садись снова за инно. Будут проблемы спрашивай - чем смогу помогу
Аватара пользователя
Vstanka

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

Сообщение Vstanka »

R.i.m.s.k.y., а как тогда скрыть флажок, предлагающий запуск приложения, т.к. если вставить так:





Код:

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

Filename: "ping.EXE"; Parameters: "127.0.0.1 -n 8"; Description: "Запустить приложение после запуска сервера"; Flags: waituntilterminated runhidden postinstall;

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

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

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

Vstanka,

вариант а) батник для вызова приложения, в котором первой строчкой ожидание, второй - запуск приложения

вариант б)



Код:

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

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
res : integer;
begin
  if CurStep=ssDone  then begin
    if ( WizardForm.RunList.Checked[WizardForm.RunList.Items.IndexOf('Запустить приложение')] ) then begin
      Exec('ping.exe, ' 127.0.0.1 -n 20',ExpandConstant('{sys}'),SW_hide,ewWaitUntilTerminated,res)
      Exec('твояпрога.ехе, 'параметры проги ',ExpandConstant('{app}\путь до проги'),SW_SHOW,ewNoWait,res);
    end;//if
  end;//CurStep=ssDone  
end; //procedure CurStepChanged(CurStep: TSetupStep);
end.
[Run]
Filename: "сервер.ехе"; Parameters: ""; Description: "Запустить сервер"; Flags: runhidden postinstall
Filename: "ping.EXE"; Parameters: ""; Description: "Запустить приложение"; Flags: runhidden
Ответить

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