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

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

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

Ветеран


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


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

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


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

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

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • 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.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

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


Отправлено: 22:06, 23-08-2009

 

Аватара для Dark Engel

Старожил


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

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


Цитата YURSHAT:
Dark Engel, Вы верно что-то напутали! Эти строки нужно добавлять в секцию [code] »
В нее и добавляю. Но что то никак. Вот сам скрипт подскажите куда добавить. (Прошу прощения за *** вынужден не афишировать программу.)

читать дальше »
[code];Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.
Код: Выделить весь код
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
   if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Отправлено: 19:09, 18-12-2009 | #711



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

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


Аватара для A1EXXX

Старожил


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

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


Dark Engel, попробуй это (через InitializeWizard):
читать дальше »
Код: Выделить весь код
;Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.

[code]
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
   if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
  WizardForm.FilenameLabel.Hide();
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';

или это (через CurPageChanged):
читать дальше »
Код: Выделить весь код
;Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.

[code]
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
   if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if CurPageID=wpInstalling then
        WizardForm.FileNameLabel.Hide;
     end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:28, 18-12-2009 | #712


Аватара для Dark Engel

Старожил


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

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


A1EXXX, Огромное спасибо второй метод сработал на ура.
Остался второй вопрос.

Как убрать во время распаковки файлов извещение какие файлы и куда распаковываются. Оставить только надпись "идет распаковка". (Или хотя бы не показывать их при silent/verysilent установке)

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Отправлено: 19:40, 18-12-2009 | #713


Аватара для A1EXXX

Старожил


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

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


Dark Engel, О_о, если ты об этом, то как раз это я и убирал в убоих случаях....

Отправлено: 19:50, 18-12-2009 | #714


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


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

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


Вложения
Тип файла: zip example_env_err.zip
(2.5 Kb, 7 просмотров)
Тип файла: zip Порядок установки (удаления).zip
(4.0 Kb, 13 просмотров)

Уважаемые знатоки (с).

Решил сделать для себя табличку, отображающую порядок возникновения событий в процессе инсталляции. При подготовки таблицы я использовал переведенный на русский хелп по Inno Setup version 5.1.8.

Вот что у меня получилось. Прошу вас поправить меня, если я где-то, что-то перепутал.



Нигде не нашел информации, чем отличается ssPreInstall от ssInstall [Добавлено] Упс. Нашел

Для чего мне нужна эта таблица этапов инсталляции?

Просто у меня возник вопрос, связанный с тем, что инсталятор не корректно обновляет внесенные изменения в системный %PATH%. (при включенном ChangesEnvironment=yes).

В обработчике какого события, или на каком шаге инсталяции, мне нужно изменить системный %PATH%, чтобы выполнить задачу из секции [Run] c флагом postinstall, с учетом новых путей?

Поэтому прошу уважаемый форум:
  • Во-первых утвердить (поправить и утвердить) мою таблицу (Сомневаюсь №35 <-> №36);
  • Во-вторых помочь с моей проблемой (продолжение см. ниже);

Последний раз редактировалось ADremLIN, 19-12-2009 в 13:19.


Отправлено: 22:56, 18-12-2009 | #715


Аватара для Dark Engel

Старожил


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

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


A1EXXX, У-у-п-с ошибся. Мне нужно убрать при silent установке окошки типа "Дальнейшая установка невозможна" См скрипт.

Код: Выделить весь код
begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Последний раз редактировалось Dark Engel, 21-12-2009 в 10:00.


Отправлено: 12:57, 19-12-2009 | #716


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


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

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


Продолжение (начало см. выше):

То есть, в общих чертах, образовалась такая проблема:

Свежеустановленная инсталлятором программа запускается в секции [Run] c флагом postinstall.
Она использует новые, только что зарегистрированные, пути для поиска необходимых для работы *.dll файлов.
Но инсталлятор, сообщая другим оконным приложениям windows об изменении "environment", похоже не обновляет эти изменения сам у себя.
А так как родителем любых процессов (приложений), запускаемых инсталлятором, является сам инсталлятор, то они (запускаемые приложения) не видят новых путей (обновленных значений других переменных окружения виндовс).

По-моему так. Поправьте меня, если я не прав...


Уже просто разбил стену лбом, но ответа так и нет.
Пример, демонстрирующий описанную проблему с %PATH%

Пояснения:

Инсталлятор добавляет новые пути в %PATH%:
'{app}\bin1'
'{app}\bin2'

ChangesEnvironment=yes;

При выходе, инсталлятор запускает bat'ничек (секция [Run] c флагом postinstall) с командой SET PATH внутри, для просмотра значений системной переменной %PATH%, и ждет закрытия окна консоли.
И я не вижу здесь (в окне консоли, открытой из инсталлятора) никаких изменений в переменных окружения...

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



НИЧЕГО НЕ ПОНИМАЮ!!!
Это БАГ Inno Setup'а, или я что-то не так делаю???
Если - это баг, то существует ли способ его обойти???

Спасибо за внимание.

ЗЫ:
Я уже сталкивался с этой проблемой ранее, получил ответ, но разрешить проблему так и не удалось... Поэтому и начал копать сам...

Последний раз редактировалось ADremLIN, 20-12-2009 в 03:54.


Отправлено: 13:16, 19-12-2009 | #717


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


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

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


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

Отправлено: 19:50, 19-12-2009 | #718


Аватара для Молодой

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


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

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


Всем доброго времени суток, подскажите где в скрипте распаковки FR указать "требуемое место для распаковки"
Не могу найти строку, заранее благодарен!

-------
Да поможет мне CTRL + ALT + DELETE


Отправлено: 12:06, 20-12-2009 | #719


Аватара для YURSHAT

Старожил


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

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


Цитата Молодой:
Всем доброго времени суток, подскажите где в скрипте распаковки FR указать "требуемое место для распаковки" »
А что значит FR?

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов


Отправлено: 12:41, 20-12-2009 | #720



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход