Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: OPERATOR555
Дата сообщения: 07.11.2013 01:39
Имею проблему... Хоть убейся, но на х64 разрядной системе, все что в секции [Registry], ничего не прописывается. Уже и Check: IsWin64 прописывал. Зато на х86 все как надо. Так же Check: IsWin64 и Check: not IsWin64 я использую в [Run]. Если дописать ArchitecturesInstallIn64BitMode=x64 то все работает. Но мне он не нужен, некорректно для меня это, ибо тогда все ставится в папку без индекса х86, а это критично. В общем весь код:
[More]
Код: ; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "ZTE Manager"
#define MyAppVersion "7.5"
#define MyAppPublisher "OPERATOR_555"
#define MyAppURL "http://vk.com/operator_555"
#define MyAppExeName "ZTE Manager.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\OPERATOR_555\Desktop\ZTE Manager Setup
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "F:\ZTE Manager\ZTE Manager.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ZTE Manager\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon


[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: ZTE Manager Device Detect; ValueData: {pf}\{#MyAppName}\AutoDetect ZTE Manager.exe; Flags: uninsdeletevalue uninsdeletekeyifempty; Check: not IsWin64
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}_is1; ValueType: string; ValueName: AppVersion; ValueData: PC_ZTEMANAGERV7.5.0U00; Flags: uninsdeletevalue uninsdeletekeyifempty; Check: not IsWin64

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: ZTE Manager Device Detect; ValueData: {pf}\{#MyAppName}\AutoDetect ZTE Manager.exe; Flags: uninsdeletevalue uninsdeletekeyifempty; Check: IsWin64
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}_is1; ValueType: string; ValueName: AppVersion; ValueData: PC_ZTEMANAGERV7.5.0U00; Flags: uninsdeletevalue uninsdeletekeyifempty; Check: IsWin64

[Run]
Filename: "{app}\USBDriverInstaller_x86.exe"; StatusMsg: Installing drivers for x86...; Flags: waituntilterminated; Check: not IsWin64
Filename: "{app}\USBDriverInstaller_x64.exe"; StatusMsg: Installing drivers for x64...; Flags: waituntilterminated; Check: IsWin64
Filename: "{app}\AutoDetect ZTE Manager.exe"; Flags: nowait
Filename: "{app}\ResetCDROM.exe"; Flags: nowait
;Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Автор: log1stable
Дата сообщения: 07.11.2013 08:37
nik1967, извини, а новые примеры чем лучше? Мог бы показать? c: Хочу сделать общий прогрессбар для проверки 4-5 файлов, но не получается. Пришлось отдельно для каждого файла.
Автор: sjwrec
Дата сообщения: 07.11.2013 10:01
OPERATOR555
Код лучше спрячь под тег More, нехорошо рекламировать свой код на всю страницу форума. Кто хочет откроет и поглядит.

Было у меня такое, мы с товарищем собирали репак программы x86 x64 - и эта проблема у нас возникла, никак не не могли собрать x86 и x64 в один инсталл. После долгих мучений, собрали два инсталла один x86, другой x64.
Автор: nik1967
Дата сообщения: 07.11.2013 12:35
OPERATOR555,
[more=держи]
Код: #define MyAppName "ZTE Manager"
#define MyAppVersion "7.5"
#define MyAppPublisher "OPERATOR_555"
#define MyAppURL "http://vk.com/operator_555"
#define MyAppExeName "ZTE Manager.exe"

[Setup]
AppId={{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
UninstallDisplayName={#MyAppName} {#MyAppVersion}
OutputDir=C:\Users\OPERATOR_555\Desktop\ZTE Manager Setup
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "F:\ZTE Manager\ZTE Manager.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ZTE Manager\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: ZTE Manager Device Detect; ValueData: {app}\AutoDetect ZTE Manager.exe; Flags: uninsdeletevalue uninsdeletekeyifempty

[Run]
Filename: "{app}\USBDriverInstaller_x86.exe"; StatusMsg: Installing drivers for x86...; Flags: waituntilterminated; Check: not IsWin64
Filename: "{app}\USBDriverInstaller_x64.exe"; StatusMsg: Installing drivers for x64...; Flags: waituntilterminated; Check: IsWin64
Filename: "{app}\AutoDetect ZTE Manager.exe"; Flags: nowait
Filename: "{app}\ResetCDROM.exe"; Flags: nowait
Автор: log1stable
Дата сообщения: 07.11.2013 13:18
nik1967, спасибо, буду ждать.
Автор: sjwrec
Дата сообщения: 07.11.2013 20:12
Всем привет, вот как и обещал - выкладываю свой модульный скрипт v6.3

[more=Скрины]

[/more]

[more=Описание]
Модульный скрипт 6.3 Исправление 1 (R1)

Что нового:
1. Добавлен модуль проверки хеш-суммы (MD5), которую при желании можно пропустить.
2. Добавлен неотключаемый модуль Temper (копирование файлов во временную папку)
3. Добавлен модуль Выбор действий если игра уже установлена (Setup2)
4. Добавлен модуль проверки и установки Net Framework (Beta версия)
5. Новый специальный скин для 6.3, имеющий 2 подмодуля (MediaSkin, InfoSkin) :
а ) В связи с этим убрана страница ReadMe.
б ) Новое окно Media c плавающими кнопками.
в ) Новое окно Информация - теперь в любое время там можно посмотреть ReadMe, Сведения о системе, Информацию о сборке.
6. На главном окне добавлен индикатор Несоответствия системе - щелчок на который открывает Сведения о системе.
Если система соответствует требованиям - то индикатор не отображается.
7. Также выдаётся подробное сообщение о несоответсвии системы - если несоответствия есть.
8. Также пришлось серьёзно поменять порядок инициализации модулей, их расположение и точки подключений модулей.
9. Значительное изменение некотрых переменных для улучшения совместимости модулей.
ПРИМЕЧАНИЕ: Большинство модулей теперь не совместимы с версией скрипта 6.2 и ниже.
10. В модуль Деинсталлятор добавлена возможность перемещения сохранок на Рабочий стол, думаю многие оценят это )
11. Попреженему сохранена поддержка игр серии STALKER (модуль fsgame.iss)
12. Исправлена несовместимость с играми серии Assassin's Creed (Исправление 1 (R1))
13. Новый специальный скин для 6.3 теперь не имеет режима Мини-инсталл, так как сам уже является мини инсталлом.
Может быть что-то ещё упустил и не написал, но в основном всё.
[/more]

Скачать 12.1 МБ

Скрипт собирался компилятором версии: 5.5.1 ee1 ANSI
Сборка скрипта проводилась и тестировалась в ОС: Windows 8 Профессиональня x86

Жду Ваши комментарии и отзывы.
Автор: trolltmn
Дата сообщения: 08.11.2013 06:53
log1stable
извиняюсь заранее что напомнил о себе, вы про меня не забыли?
Автор: log1stable
Дата сообщения: 08.11.2013 12:48
В процедуру кнопки удаления поместить этот код можно. Если я правильно понял.

Код:
BtnSetVisibility(Backbtn,True);
BtnSetVisibility(UnBackbtn,False);
CrBackuplbl.Show;
Автор: trolltmn
Дата сообщения: 08.11.2013 13:04

Цитата:
В процедуру кнопки удаления поместить этот код можно. Если я правильно понял.


нет, выдаст ошибку.
Автор: log1stable
Дата сообщения: 08.11.2013 14:28
trolltmn, какую? Я ж не экстрасенс.
Автор: Pegalet
Дата сообщения: 09.11.2013 10:10
Всем привет.
Стоит задача: на одном из шагов установки программы сделать раскрытый выпадающий список, в котором перечислены несколько пунктов, но можно выбрать только один из них.
Логика такая: если выбрать первый пункт выпадающего меню, то устанавливается файл "A" в определенную папку с программой, если выбрать второй пункт выпадающего меню, то устанавливается файл "B" и т.д.. Похожее сделал с помощью секции [Components], но это не то что нужно.
Так же должен быть произвольный текст над выпадающим списком.

Что-то похожее попытался изобразить на картинке
http://clip2net.com/clip/m134532/thumb640/1383982186-3070e-11kb.png
Автор: nik1967
Дата сообщения: 09.11.2013 22:48
log1stable, [more=ну держи проверку MD5]
Код: // РАБОТА С Md5
#define File1 "{src}\data1.cst"
#define Md1 "48e8f904578e76e5aa299a6473778333"

#define File2 "{src}\data2.cst"
#define Md2 "72359f8d4b6ffb24145c44063483cd54"

#define File3 "{src}\data3.cst"
#define Md3 "45b4a905dc382cea77301c8fe5df00ea"

#define File4 "{src}\data4.cst"
#define Md4 "194b5c29333ff8cea740a82ef523574b"

#define File5 "{src}\data5.cst"
#define Md5 "32c342efbd7de94ded468fe895a37fdc"

#define File6 "{src}\"
#define Md6 "87999b44ab8ddd557cddd5dd7ab40e7c"

#define File7 "{src}\"
#define Md7 "ef4464b11a21e18bc372539b6ceb3f75"

#define File8 "{src}\"
#define Md8 "ef4464b11a21e18bc372539b6ceb3f75"

#define File9 "{src}\"
#define Md9 "ef4464b11a21e18bc372539b6ceb3f75"

#define File10 "{src}\"
#define Md10 "ef4464b11a21e18bc372539b6ceb3f75"
; и так далее

[Setup]
AppName=ISMD5_Example
AppVerName=ISMD5_Example
DefaultDirName={pf}\ISMD5_Example
OutputDir=.
ShowLanguageDialog=auto
OutputBaseFilename=ISMD5

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

[CustomMessages]
rus.Wait=Подождите, идет проверка хеш-сумм установочных файлов...
rus.Check=Проверка MD5 — «%1» — %2
rus.Check1=Проверка MD5
rus.Close=Вы действительно хотите пропустить проверку MD5?%nЕсли хэш-суммы файлов не совпадут,%nто установка игры может пройти некорректно.%nПропустить проверку?
rus.Close1=Отмена проверки MD5
rus.Error=Вы можете на свой страх и риск продолжить установку, но лучше перехешировать торрент и скачать исправные файлы.%nПродолжить установку?
rus.Error1=Хеш-сумма файла — «%1» — не совпадает!
rus.Yes=Да
rus.No=Нет
rus.MB=%1 мб
rus.GB=%1 гб
rus.TB=%1 тб
rus.Comparing=Сравнение хеш-суммы файла: «%1» (%2)
rus.Skip=Пропустить
rus.Foundfiles=Проверяется файл: %1 из %2
rus.GSize=Проверено: %1 из %2

eng.Wait=Wait, checking the hash-sum of installation files...
eng.Check=Checking the MD5 — «%1» — %2
eng.Check1=Checking the MD5
eng.Close=You really want to skip MD5 check?%nIf a hash amount of files won't match, installation%nof game can incorrectly pass.%nTo skip check?
eng.Close1=Canceling of check MD5
eng.Error=You can continue installation on your own risk,%nbut its highly recommended to rehash the torrent and download the correct files.%nContinue installation?
eng.Error1=Hash sum of file — «%1» — is incorrect!
eng.Yes=Yes
eng.No=No
eng.MB=%1 mb
eng.GB=%1 gb
eng.TB=%1 tb
eng.Comparing=Comparing file hash-sum: «%1» (%2)
eng.Skip=Skip
eng.Foundfiles=Check files: %1 of %2
eng.GSize=Checked: %1 of %2

[Files]
Source: Include\ISMD5.dll; Flags: dontcopy;

[_code]
const
ID_QUESTION = 65579; // вопрос
ID_ASTERISK = 65583; // информация
ID_HAND = 65581; // ошибка
ID_EXCLAMATION = 65577; // предупреждение

type
TMD5Callback = function (Progress: Longword): Boolean;

var
MD5Form,MyExit,MyError: TSetupForm;
MD5PB: TNewProgressBar;
Res,Total,CurN: Integer;
CloseForm,Error,CanClose: boolean;
OkButton, CancelButton: TButton;
Ico: TNewIconImage;
CheckMD5Label,CheckMD5Label2,CheckMD5Label3,CheckMD5Label4: TLabel;
CurFilename: String;
CurSize: DWORD;
TotalProgress: Longword;
TSize: Extended;

function NumToStr(Float: Extended): String;
begin
Result:= Format('%.2n', [Float]);
StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Byte: Extended): String;
begin
if Byte < 1024 then Result:= FmtMessage(ExpandConstant('{cm:MB}'), [NumToStr(Byte)]) else
if Byte/1024 < 1024 then Result:= FmtMessage(ExpandConstant('{cm:GB}'), [NumToStr((Byte/1024*100)/100)]) else
Result:= FmtMessage(ExpandConstant('{cm:TB}'), [NumToStr(((Byte/(1024*1024))*100)/100)]);
end;

function CheckMD5(Filename: PAnsiChar; MD5: PAnsiChar; Callback: TMD5Callback): Boolean; external 'CheckMD5@files:ISMD5.dll stdcall';

function MD5Progress(Progress: Longword): Boolean;
begin
MD5PB.Position:= TotalProgress+(Progress*CurSize div Trunc(TSize));
CheckMD5Label3.Caption:= FmtMessage('%1.%2 %', [IntToStr(MD5PB.Position div 10), chr(48 + MD5PB.Position mod 10)]);
CheckMD5Label4.Caption:= FmtMessage(ExpandConstant('{cm:GSize}'), [MbOrTb(Trunc(TSize) * MD5PB.Position div 1000), MbOrTb(Trunc(TSize))]);
MD5Form.Caption:= FmtMessage(ExpandConstant('{cm:Check}'), [CurFilename, CheckMD5Label3.Caption]);
Application.ProcessMessages;
if CloseForm then
Result:= false
else
Result:= True;
end;

function Size64(Hi, Lo: Integer): Extended;
begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: string): Extended;
var
FSR: TFindRec;
begin
Result:= 0;
if FindFirst(FileName, FSR) then
try
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
Result:= Size64(FSR.SizeHigh, FSR.SizeLow) div (1024*1024);
finally
FindClose(FSR);
end;
end;

function Exists(const FileName: string): Extended;
var
Size: Extended;
begin
if FileExists(FileName) then begin
Size:= GetFileSize(FileName);
TSize:= TSize+Size;
Total:= Total+1;
end;
end;

procedure CheckN();
begin
Exists(ExpandConstant('{#File1}'));
Exists(ExpandConstant('{#File2}'));
Exists(ExpandConstant('{#File3}'));
Exists(ExpandConstant('{#File4}'));
Exists(ExpandConstant('{#File5}'));
Exists(ExpandConstant('{#File6}'));
Exists(ExpandConstant('{#File7}'));
Exists(ExpandConstant('{#File8}'));
Exists(ExpandConstant('{#File9}'));
Exists(ExpandConstant('{#File10}'));
// и так далее
end;

function CheckMD(Filename, MD5: String): Boolean;
begin
TotalProgress:= MD5PB.Position;
Result:= True;
if FileExists(Filename) then begin
CurFilename:= ExtractFilename(FileName);
CurN:= CurN+1;
CheckMD5Label2.Caption:= FmtMessage(ExpandConstant('{cm:Foundfiles}'), [IntToStr(CurN), IntToStr(Total)]);
if Trunc(GetFileSize(FileName)*(1024*1024)) > 0 then begin
CurSize:= Trunc(GetFileSize(FileName));
CheckMD5Label.Caption:= FmtMessage(ExpandConstant('{cm:Comparing}'), [CurFilename, MbOrTb(CurSize)]);
Result:= CheckMD5(Filename, PAnsiChar(MD5), @MD5Progress);
end else begin
MD5Form.Free;
Result:= false;
end;
end;
end;

procedure MD5FormClose(Sender: TObject; var CanClose: Boolean);
begin
MD5PB.State:= npbsPaused;
CanClose:= false;
MyExit:= CreateCustomForm();
with MyExit do begin
ClientWidth:= ScaleX(360);
ClientHeight:= ScaleY(150);
Caption:= ExpandConstant('{cm:Close1}');

Ico:= TNewIconImage.Create(MyExit);
with Ico do begin
Parent:= MyExit;
Left:= ScaleX(20);
Top:= ScaleY(40);
Icon.Handle:= ID_QUESTION;
end;

with TBevel.Create(MyExit) do begin
SetBounds(ScaleX(0),ScaleY(105),MyExit.Width,ScaleY(2));
Parent:= MyExit;
end;

with TNewStaticText.Create(MyExit) do begin
Left:= ScaleX(65);
Top:= ScaleY(25);
Width:= ScaleX(278);
Height:= ScaleY(60);
AutoSize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:Close}');
Parent:= MyExit;
end;

CancelButton:= TButton.Create(MyExit);
with CancelButton do begin
Width:= ScaleX(75);
Height:= ScaleY(23);
Left:= MyExit.Width - Width - ScaleX(15);
Top:= MyExit.Height - Height * 2 - ScaleY(13);
Caption:= ExpandConstant('{cm:No}');
ModalResult:= mrCancel;
Parent:= MyExit;
end;

OkButton:= TButton.Create(MyExit);
with OkButton do begin
Width:= CancelButton.Width;
Height:= CancelButton.Height;
Left:= CancelButton.Left - Width - ScaleX(5);
Top:= CancelButton.Top;
Caption:= ExpandConstant('{cm:Yes}');
ModalResult:= mrOk;
Parent:= MyExit;
end;

ActiveControl:= CancelButton;
Center;
end;
if MyExit.ShowModal() = mrCancel then begin
CloseForm:= false;
MD5PB.State:= npbsNormal;
end else begin
CloseForm:= true;
MD5Form.Free;

if FileExists(ExpandConstant('{src}\setup.exe')) then
Exec(ExpandConstant('{src}\setup.exe'), '', '', SW_SHOWNORMAL, ewNoWait, Res)
end;
end;

procedure CBClick(Sender: TObject);
begin
MD5FormClose(Sender,CanClose);
end;

function InitializeSetup(): Boolean;
begin
MD5Form:= CreateCustomForm();
with MD5Form do begin
ClientWidth:= ScaleX(360);
ClientHeight:= ScaleY(150);
OnCloseQuery:= @MD5FormClose;
#ifdef UNICODE
DoubleBuffered:= true;
#endif
Center;
end;

CheckN();

with TLabel.Create(MD5Form) do begin
SetBounds(ScaleX(5),ScaleY(5),ScaleX(350),ScaleY(15));
Caption:= ExpandConstant('{cm:Wait}');
Transparent:= True;
Parent:= MD5Form;
end;
CheckMD5Label:= TLabel.Create(MD5Form);
with CheckMD5Label do begin
SetBounds(ScaleX(5),ScaleY(25),ScaleX(350),ScaleY(15));
Transparent:= True;
Parent:= MD5Form;
end;
CheckMD5Label2:= TLabel.Create(MD5Form);
with CheckMD5Label2 do begin
SetBounds(ScaleX(5),ScaleY(65),ScaleX(300),ScaleY(15));
Transparent:= True;
Parent:= MD5Form;
end;
CheckMD5Label3:= TLabel.Create(MD5Form);
with CheckMD5Label3 do begin
SetBounds(ScaleX(240),ScaleY(70),ScaleX(50),ScaleY(15));
Transparent:= True;
Font.Size:= 14;
Parent:= MD5Form;
end;
CheckMD5Label4:= TLabel.Create(MD5Form);
with CheckMD5Label4 do begin
SetBounds(ScaleX(5),ScaleY(85),ScaleX(300),ScaleY(15));
Transparent:= True;
Parent:= MD5Form;
end;

MD5PB:= TNewProgressBar.Create(MD5Form);
with MD5PB do begin
Min:= 0;
Max:= 1000;
SetBounds(ScaleX(5),ScaleY(45),ScaleX(350),ScaleY(15));
Parent:= MD5Form;
end;

with TBevel.Create(MD5Form) do begin
SetBounds(ScaleX(0),ScaleY(105),MD5Form.Width,ScaleY(2));
Parent:= MD5Form;
end;

CancelButton:= TButton.Create(MD5Form);
with CancelButton do begin
Width:= ScaleX(75);
Height:= ScaleY(23);
Left:= MD5Form.Width - Width - ScaleX(15);
Top:= MD5Form.Height - Height * 2 - ScaleY(13);
Caption:= ExpandConstant('{cm:Skip}');
OnClick:= @CBClick;
Parent:= MD5Form;
end;

MD5Form.Show;
Application.Title:= ExpandConstant('{cm:Check1}');

Error:=true;
repeat
if not CheckMD(ExpandConstant('{#File1}'), '{#Md1}') then break;
if not CheckMD(ExpandConstant('{#File2}'), '{#Md2}') then break;
if not CheckMD(ExpandConstant('{#File3}'), '{#Md3}') then break;
if not CheckMD(ExpandConstant('{#File4}'), '{#Md4}') then break;
if not CheckMD(ExpandConstant('{#File5}'), '{#Md5}') then break;
if not CheckMD(ExpandConstant('{#File6}'), '{#Md6}') then break;
if not CheckMD(ExpandConstant('{#File7}'), '{#Md7}') then break;
if not CheckMD(ExpandConstant('{#File8}'), '{#Md8}') then break;
if not CheckMD(ExpandConstant('{#File9}'), '{#Md9}') then break;
if not CheckMD(ExpandConstant('{#File10}'),'{#Md10}') then break;
// и так далее
Error:=false;
until true;

if not CloseForm and not Error then
if FileExists(ExpandConstant('{src}\setup.exe')) then
Exec(ExpandConstant('{src}\setup.exe'), '', '', SW_SHOWNORMAL, ewNoWait, Res);

if not CloseForm and Error then begin
MD5PB.State:= npbsError;
MyError:= CreateCustomForm();
with MyError do begin
ClientWidth:= ScaleX(360);
ClientHeight:= ScaleY(150);
Caption:= FmtMessage(ExpandConstant('{cm:Error1}'), [CurFilename]);

Ico:= TNewIconImage.Create(MyError);
with Ico do begin
Parent:= MyError;
Left:= ScaleX(20);
Top:= ScaleY(40);
Icon.Handle:= ID_HAND;
end;

with TBevel.Create(MyError) do begin
SetBounds(ScaleX(0),ScaleY(105),MyError.Width,ScaleY(2));
Parent:= MyError;
end;

with TNewStaticText.Create(MyError) do begin
Left:= ScaleX(65);
Top:= ScaleY(25);
Width:= ScaleX(278);
Height:= ScaleY(60);
AutoSize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:Error}');
Parent:= MyError;
end;

CancelButton:= TButton.Create(MyError);
with CancelButton do begin
Width:= ScaleX(75);
Height:= ScaleY(23);
Left:= MyError.Width - Width - ScaleX(15);
Top:= MyError.Height - Height * 2 - ScaleY(13);
Caption:= ExpandConstant('{cm:No}');
ModalResult:= mrCancel;
Parent:= MyError;
end;

OkButton:= TButton.Create(MyError);
with OkButton do begin
Width:= CancelButton.Width;
Height:= CancelButton.Height;
Left:= CancelButton.Left - Width - ScaleX(5);
Top:= CancelButton.Top;
Caption:= ExpandConstant('{cm:Yes}');
ModalResult:= mrOk;
Parent:= MyError;
end;

ActiveControl:= CancelButton;
Center;
end;
if MyError.ShowModal() = mrOk then begin
MD5Form.Free;
if FileExists(ExpandConstant('{src}\setup.exe')) then
Exec(ExpandConstant('{src}\setup.exe'), '', '', SW_SHOWNORMAL, ewNoWait, Res);
end;
end;
end;
Автор: log1stable
Дата сообщения: 10.11.2013 01:56
nik1967, спасибо большое.
Автор: Pegalet
Дата сообщения: 10.11.2013 15:28
Реализовал листбокс с 5ю пунктами на одном из шагов установки.
Как сделать следующее:
в случае если был выбран первый пункт листбокса - установить файл file1.txt в папку с программой
в случае если был выбран второй пункт листбокса - установить файл file2.txt в папку с программой.

То что есть на данный момент

Логика подсказывает, что должно быть что-то похожее на:

Код:
case ListBox.ItemIndex of
0 : копируем file1.txt
1 : копируем file2.txt
2 : копируем file3.txt
3 : копируем file4.txt
4 : копируем file5.txt
Автор: log1stable
Дата сообщения: 10.11.2013 22:27
Pegalet,
Если файлы для копирования возле инсталлятора:

Код:
case ListBox.ItemIndex of
0:
begin
FileCopy(ExpandConstant('{src}\file1.txt'),ExpandConstant('{app}\file1.txt'),0);
end;
end;
Автор: alpost
Дата сообщения: 12.11.2013 07:14
Inno Setup 5.5.4

[more]5.5.4 (2013-10-13)
Added the Windows 8.1 "compatibility" section to the various manifest resources used by Inno Setup. This enables any check for the operating system version to get the real version number (6.3) instead of getting the same version number as it did in Windows 8 (6.2).
Compiler IDE: Added new option: Show line numbers in gutter (default: off).
Pascal Scripting changes:
Added new event function CurInstallProgressChanged, which you can use to monitor progress while Setup is extracting files, creating shortcuts, creating INI entries, and creating registry entries. See the help file and the CodeExample1.iss example script for more information. Contributed by TLama via GitHub.
WizardForm.BeveledLabel visibility is now automatically handled even if its caption was set from [Code].
Unicode [Code] based on RemObjects Pascal Script Git commit 538905910852bcbeef646f26592a973d15d3d5ec.
Minor tweaks.[/more]
Автор: log1stable
Дата сообщения: 12.11.2013 21:13
Перевод для 5.4.4

Код:
5.4.4 (2013-10-13)
1. Добавлена секция Windows 8.1 "Совместимость" для различных объявляемых ресурсов, используемых Inno. Это включает все проверки версии операционной системы, чтобы получит реальную версию.
2. Студия: Добавленная новая опция: показать номер линии в гуттере.
3. Изменения в скриптинге:
3.1 Добавлено новое событие в фукнции CurInstallProgressChanged, которое можно использовать, чтобы отлавливать прогресс установки во время распаковки файлов, создание иконок, изменения в строках INI-файла и создания записей в реестре. Смотрите файл справки и CodeExample1.iss - пример скрипта - для более полной информации. Содействовал TLama из GitHub.
3.2 Видимость элемента WizardForm.BeveledLabel теперь автоматически меняется, когда свойство Caption задается из кода.
3.3 Юникод-версия секции Code основана на объектах RemObjects Pascal Script Git.
4. Мелкие доработки
Автор: cepbl4
Дата сообщения: 13.11.2013 09:41
гуру инсталляторов и кодинга, прошу вашей помощи

собираю расширенный установщик utorrent.
хочу внедрить в него возможность подхвата ip-фильтров.
на данном этапе хочу, чтобы установщик вытаскивал в файл диапазоны ипов и названия провайдеров со страницы http://www.elcat.kg/clients/
как это реализовать?
заодно хочется, чтобы установщик определял внешний ип компа, на котором запущена установка.

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

может быть чтото из задуманного можно реализовать намного проще? приветствую критику. сам в кодинге шарю очень мало.

кому интересно, расписал весь свой проект на форуме
Автор: alexandrevil
Дата сообщения: 13.11.2013 10:18
Доброго времени суток !
Ищу инсталлятор как у Джова для мод паков с определением директории установки.

Что он делает как я заметил.
Если выбрать установку звонок крита, то он из папки соунд копирует все файлы в папку рес_модс и только потом туда втыкает этот звонок...
Если не выбрана папку где находиться клиент то он не начнет установку.

Там еще 3 страницы не стал фоткать, лицензия, и две инфы, до установки и после.

Что нужно если позволите:
- упаковывать в себе папку с модами (mods) в которой будет допустим еще папок 10, в которых в свою очередь будут моды.
- находил директорию игры и сразу предлагал место установки.
- мог копировать игровые файлы из одной папки в другую.

http://s019.radikal.ru/i618/1311/c4/66dd875f0db8.jpg
http://s018.radikal.ru/i507/1311/4c/a042e38216be.jpg
http://s019.radikal.ru/i608/1311/2a/38d6d602fa49.jpg
http://s61.radikal.ru/i171/1311/45/5353e12d6e4b.jpg
http://s019.radikal.ru/i617/1311/07/de15473dedac.jpg


Заранее спасибо !
Автор: OPERATOR555
Дата сообщения: 14.11.2013 00:32
nik1967, увы, реестр все равно не прописывается.
Может попробовать кодом? Как оно будет в коде выглядеть? Мне нужно прописать две строчки:


Код: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}_is1]
"IsAppInstalled"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"ZTE Manager Device Detect"="C:\Program Files\ZTE Manager\AutoDetect ZTE Manager.exe"
Автор: log1stable
Дата сообщения: 14.11.2013 02:33
OPERATOR555,
Записать в реестр:

Код:
RegWriteDWordValue(HKLM,'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}_is1),
'IsAppInstalled',00000001);
RegWriteStringValue(HKLM,'Software\Microsoft\Windows\CurrentVersion\Run',
'ZTE Manager Device Detect','C:\Program Files\ZTE Manager\AutoDetect ZTE Manager.exe');
Автор: OPERATOR555
Дата сообщения: 14.11.2013 09:12
log1stable
ни один код не заработал... Даже скомпилировать немогу...
Автор: distortion
Дата сообщения: 14.11.2013 09:35
Подскажите, пожалуйста, чем из iss скрипта вытащить реестровые данные в .reg?
Автор: Tapas77789
Дата сообщения: 14.11.2013 10:09
OPERATOR555


Код: RegWriteDWordValue(HKLM,'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{93D34EE3-99B3-4DB1-8B0A-0A657466F90D}_is1),
'IsAppInstalled',00000001);
Автор: OPERATOR555
Дата сообщения: 14.11.2013 13:34
Tapas77789
спасибо, все работает на отлично. Вот только что по поводу второго кода? Убийство процессов
Автор: Tapas77789
Дата сообщения: 14.11.2013 16:01
OPERATOR555

Код: ShellExec('', ExpandConstant('{sys}\cmd.exe'),
'/c taskkill /im notepad.exe /f','', SW_SHOW, ewNoWait, ErrorCode);
Автор: serg566
Дата сообщения: 14.11.2013 16:38
Подскажите, как сделать отображение копируемых файлов на InstallingPage, знаю уже это точно было, но не могу найти.
Автор: OPERATOR555
Дата сообщения: 14.11.2013 17:38
Tapas77789
Автор: R3Pa4eK
Дата сообщения: 14.11.2013 17:44
OPERATOR555

Код:
...
var
ErrorCode: Integer;
...
ShellExec('', ExpandConstant('{sys}\cmd.exe'), '/c taskkill /im notepad.exe /f','', SW_SHOW, ewNoWait, ErrorCode);
...
Автор: nik1967
Дата сообщения: 14.11.2013 17:48
serg566, скачай Русская справка к версии 5.5.3 из шапки - Прочая информация=>Inno Faq 1.4=>Оглавление=>Как добавить TMemo на страницу установки, в котором будут отображаться извлекаемые файлы?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.