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

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

Автор: serg566
Дата сообщения: 14.11.2013 21:24
nik1967, спасибо
Автор: 999Kay666
Дата сообщения: 14.11.2013 22:06
только не клеймите сразу, как глупый вопрос - мол, никак!

в игре Metro Last Light файл user.cfg (в нем не только настройки) находится в папке название которой генерируется при установке(или первом запуске).

нужно, чтобы при установке моего инсталлятора, этот файл устанавливался в конечную папку, но название этой папки всегда разное(то 11000012e00f52f, то 1100001006670b1. в реестре этой папки нет).

Вопрос: как сказать инсталлеру, чтобы кидал файл в уже существующую папку по такому-то пути, иначе ничего

[Files]
Source: "C:\user.cfg"; DestDir: "{localappdata}\4A Games\Metro LL\генерируемое игрой имя папки\"; Components: cfg; Flags: ignoreversion;

заранее спасибо.

PS с сохранениями игры в папке "мои документы" та же история
[Setup]
DefaultDirName={userdocs}\4A Games\Metro LL\генерируемое игрой имя папки
Автор: log1stable
Дата сообщения: 15.11.2013 06:26
999Kay666, почитай про findfirst findnext.
Автор: sjwrec
Дата сообщения: 15.11.2013 11:14
999Kay666

Можно поступить следующим образом:

Перед окончанием установки в Коде секции выполнить запуск игры. и затем закрыть процесс.
Папка сгенерируется и потом уже искать её через findfirst findnext
и кидать туда файл.
Автор: AlekseyPopovv
Дата сообщения: 15.11.2013 11:25
Ребята, помогите. Нужно что бы при "Распаковке портативной версии" отображалась папка "D:\My Program Portable" - то есть рядом с инталлятором, а при "Обычной установке" отображалась папка "C:\Program Files (x86)\My Program". Возможно ли такое?
Автор: tahirg
Дата сообщения: 15.11.2013 12:16
Подскажите плиз, возможно ли реализовать такое
Есть набор программ устанавливаемых через инно, среди компонентов допустим есть прога 1.exe
возможно ли
если пользователь выбрал установку этой программы, выходило сообщение
"Внимание! Прежде чем установить эту программу, необходимо установить бла бла бла... Выполнить необходимые условия?" и кнопки в этом сообщении
Да (я позже выполню) - тогда чекбокс автоматом с этой проги снимается и продолжается установка других компонентов (если они выбраны)
Нет (уже установлено) - тогда чекбокс автоматом с этой проги НЕ снимается и продолжается установка выбраной 1.exe и других компонентов (если они выбраны)
Автор: Tapas77789
Дата сообщения: 16.11.2013 10:48
999Kay666

Цитата:
Вопрос: как сказать инсталлеру, чтобы кидал файл в уже существующую папку по такому-то пути, иначе ничего

[more=Сырой пример][Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
OutputDir=.

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

[Files]
Source: user.cfg; DestDir: {code:MyConst|{localappdata}\4A Games\Metro LL}; Flags: overwritereadonly;
Source: user.cfg; DestDir: {code:MyConst|{userdocs}\4A Games\Metro LL}; Flags: overwritereadonly;

[_code]
var
S: String;

function GetDirName(const SearchDir: String): String;
var
DSR: TFindRec;
APath: String;
begin
APath:=AddBackslash(SearchDir);
if FindFirst(APath + '*.*', DSR) then
try
repeat
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
if not ((DSR.Name = '.') or (DSR.Name = '..')) then
Result:=APath + DSR.Name;
until not FindNext(DSR);
finally
FindClose(DSR);
end;
end

function MyConst(Param: String): String;
begin
Result:=GetDirName(Param);
end;[/more]
Автор: tuz1979
Дата сообщения: 16.11.2013 15:06
Привет всем!
подскажите как добавить 2 кнопки для перехода на сайт
вот в этих местах?
Автор: log1stable
Дата сообщения: 16.11.2013 23:43
tuz1979,
[more]var
ButtonSite1: TNewButton;
ButtonSite2: TNewButton;

procedure ButtonSite1Click(Sender: TObject); forward;
procedure ButtonSite2Click(Sender: TObject); forward;

procedure InitializeWizard;
begin

ButtonSite1 := TNewButton.Create(WizardForm);
with ButtonSite1 do
begin
Parent := WizardForm.WelcomePage;
Left := ScaleX(96);
Top := ScaleY(232);
Width := ScaleX(99);
Height := ScaleY(25);
Caption := 'Сайт 1';
OnClick := @ButtonSite1Click;
end;

ButtonSite2 := TNewButton.Create(WizardForm);
with ButtonSite2 do
begin
Parent := WizardForm.WelcomePage;
Left := ScaleX(328);
Top := ScaleY(232);
Width := ScaleX(99);
Height := ScaleY(25);
Caption := 'Сайт 2';
end;

ButtonSite1.TabOrder := 2;
ButtonSite2.TabOrder := 3;
end;

procedure ButtonSite1Click(Sender: TObject);
var ErrorCode: integer;
begin
ShellExec('','http://vk.com/log1st','','',SW_SHOW,ewNoWait,ErrorCode);
end;

procedure ButtonSite2Click(Sender: TObject);
var ErrorCode: integer;
begin
ShellExec('','http://vk.com/id1','','',SW_SHOW,ewNoWait,ErrorCode);
end;
[/more]
Автор: nik1967
Дата сообщения: 18.11.2013 10:43
AlekseyPopovv [more=Обычная или портативная установка]
Код: [Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Uninstallable=not MyRadioBtnChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Flags: checkedonce; Check: not MyRadioBtnChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Flags: checkedonce; Check: not MyRadioBtnChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not MyRadioBtnChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: not MyRadioBtnChecked

[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выберите тип установки:
MyRadioCaption_1=Распаковка портативной версии
MyRadioCaption_2=Установка обычной версии (рекомендуется)

[UninstallDelete]
Type: filesandordirs; Name: {app}

[_code]
var
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function MyRadioBtnChecked: boolean;
begin
Result:= MyRadioBtn_1.Checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: WizardForm.DirEdit.Text:= ExpandConstant('{src}')+'\My Program Portable';
MyRadioBtn_2: WizardForm.DirEdit.Text:= ExpandConstant('{#SetupSetting("DefaultDirName")}');
end;
end;

procedure InitializeWizard();
begin
with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Top:= ScaleY(120);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:HeaderLabelPage}');
Parent:= WizardForm.SelectDirPage;
end;

MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do
begin
Top:= ScaleY(140);
Left:= ScaleX(5);
Width:= ScaleX(200);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= WizardForm.SelectDirPage;
end;

MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do
begin
Top:= ScaleY(160);
Left:= ScaleX(5);
Width:= ScaleX(260);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
OnClick:= @RadBtnOnClick;
Checked:= True;
Parent:= WizardForm.SelectDirPage;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:= (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked);
end;
Автор: sjwrec
Дата сообщения: 19.11.2013 18:40
Модульный скрипт v6.3 R1 - Assassin's Creed

[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

Жду Ваши комментарии и отзывы, а то уже скачали 11 раз - и все молчат.
Автор: sergey3695
Дата сообщения: 20.11.2013 11:10
sjwrec не правильно что-то с формами сделал.

Лучше бы внизу разместил бы все элементы управления,а не две формы (ну хотя их там 3). После нажатия на установить,то ну очень долго запускается и закрывается не охти.
Автор: sjwrec
Дата сообщения: 20.11.2013 19:26
sergey3695
Ну вот хоть один комментарий.

Вообще задумка была такая чтобы инсталл был небольшой, поэтому на главной форме всё собрано как надо. Просто мне надоел тот грамоздкий инсталл в стиле репакера Fenixx - хотелось чего-то нового. Вот и появилась версия 6.3 с отдельными окнами.

Это Медиа эффекты и Информационное окно.
Они при желании легко скрываются и показываются.

Насчёт двойной формы, да так получилось, но если медиа форму не накладывать на главную то ничего и не заметно такого )

По поводу закрытия - над этим ещё поработаю.

Долгий запуск у меня идёт ещё потому что не все файлы распаковывает Temper.iss - слайды и некоторые файлы попрежнему пока копируются во время создания инсталла (отсюда и задержка).


Автор: kernel32_dll
Дата сообщения: 24.11.2013 22:12
Чем извлечь архивы 5.4.2?
Автор: sjwrec
Дата сообщения: 26.11.2013 05:20
kernel32_dll
Inno Setup Unpacker 0.38 в шапке погляди - только если у тебя не расширенная версия инсталла, иначе не поможет.
Автор: uncleslava
Дата сообщения: 26.11.2013 07:33
Есть проблема: при деинсталяции из секции [code] показываю пользователю MsgBox. Как понять что uninstall запущен с параметром /SILENT и не показывать MsgBox?
Автор: sjwrec
Дата сообщения: 26.11.2013 09:02
uncleslava
Без скрипта не смогу помочь. Так как не знаю как именно вы запускаете деинсталлятор из Code
Автор: uncleslava
Дата сообщения: 26.11.2013 10:28
Не правильно расставил знаки препинания:

Цитата:
Есть проблема при деинсталяции: из секции "code" показываю пользователю MsgBox. Как понять что uninstall запущен с параметром /SILENT и не показывать MsgBox?

Уточню вопрос: как в коде, а именно в теле функции CurUninstallStepChanged, узнать что деинсталятор запущен с параметром /SILENT.
Автор: sjwrec
Дата сообщения: 26.11.2013 10:53
uncleslava
Какой скрипт вы мне показали. Такой и ответ

if UninstallSilent then

Автор: icetanker
Дата сообщения: 26.11.2013 15:32
Добрый день!
Автор: Zorbbb
Дата сообщения: 26.11.2013 15:39
Уважаемые, достаточно ли этого, чтобы файло скопировалось только на свою операционку?

[Files]
Это только на win 7
Source: att7\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly; OnlyBelowVersion: 0,6.1
Это на win 8
Source: att8\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly; OnlyBelowVersion: 0,6.2
Это на win 8.1
Source: att8.1\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly; OnlyBelowVersion: 0,6.3
Автор: Habib2302
Дата сообщения: 26.11.2013 18:15
Доброе время суток. Помогите мне пожалуйста вшить портабл в мой скрипт!!!
[more=Скрипт]
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "AIDA64"
#define MyAppVersion "4.00.2700"
#define MyAppPublisher "Copyright © 1995-2013 FinalWire Ltd."
#define MyAppURL "http://www.aida64.com/"
#define AIDA641 "AIDA64 Extreme Edition"
#define AIDA642 "AIDA64 Business Edition"
#define AIDA643 "AIDA64 Engineer Edition"
#define AIDA64EXE "aida64.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\FinalWire
DefaultGroupName=FinalWire
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion}
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
ShowLanguageDialog=yes
UninstallDisplayIcon={app}\ico.ico
;Авторские права.
VersionInfoCopyright=Xabib © 2013
;Производитель.
AppPublisher={#MyAppPublisher}
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppCopyright=Xabib © 2013
AppVerName={#MyAppVersion}
UninstallDisplayName={#MyAppName}
AppModifyPath={app}
VersionInfoVersion={#MyAppVersion}
VersionInfoProductName={#MyAppName}
VersionInfoProductVersion={#MyAppVersion}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID=TheBestAidaInstallEver
VersionInfoDescription={#MyAppName} RePack by Xabib
;Каталоги в стиле от R. G. Catalyst
DisableProgramGroupPage=true
ComponentsListTVStyle=true

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[CustomMessages]
Russian.Msg1=Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Components]
Name: AIDA64; Description: {#MyAppName}:; Flags: fixed; Types: full;
Name: AIDA64\1; Description: {#AIDA641}; Flags: exclusive;
Name: AIDA64\2; Description: {#AIDA642}; Flags: exclusive;
Name: AIDA64\3; Description: {#AIDA643}; Flags: exclusive;
Name: icons; Description: {cm:AdditionalIcons}; Types: full;
Name: icons\desktop; Description: {cm:CreateDesktopIcon}; Types: full;
Name: icons\quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Types: full;
Name: icons\quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; MinVersion: 0,6.1; Types: full;
Name: InterfaceLang; Description: {cm:InterfaceLang}; Flags: fixed; Types: full;
Name: InterfaceLang\en; Description: Английский; Flags: exclusive;
Name: InterfaceLang\ru; Description: Русский; Flags: exclusive;
Name: InterfaceLang\ua; Description: Украинский; Flags: exclusive;

[Ini]
filename: {app}\aida64.ini; Section: Generic; Key: Language; string: en; Components: InterfaceLang\en;
filename: {app}\aida64.ini; Section: Generic; Key: Language; string: ru; Components: InterfaceLang\ru;
filename: {app}\aida64.ini; Section: Generic; Key: Language; string: ua; Components: InterfaceLang\ua;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
Source: 1.ico; DestDir: {app}; Flags: ignoreversion; Components: AIDA64\1;
Source: 2.ico; DestDir: {app}; Flags: ignoreversion; Components: AIDA64\2;
Source: 3.ico; DestDir: {app}; Flags: ignoreversion; Components: AIDA64\3;
Source: PinToTasckbar.vbs; DestDir: {tmp};

Source: {app}\{#AIDA641}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: AIDA64\1;
Source: {app}\{#AIDA642}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: AIDA64\2;
Source: {app}\{#AIDA643}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: AIDA64\3;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: {group}\{#AIDA641}; Filename: {app}\{#AIDA64EXE}; Components: AIDA64\1;
Name: {group}\{#AIDA642}; Filename: {app}\{#AIDA64EXE}; Components: AIDA64\2;
Name: {group}\{#AIDA643}; Filename: {app}\{#AIDA64EXE}; Components: AIDA64\3;

Name: {group}\{cm:UninstallProgram,{#AIDA641}}; Filename: {uninstallexe}; Components: AIDA64\1; IconFilename: {app}\1.ico;
Name: {group}\{cm:UninstallProgram,{#AIDA642}}; Filename: {uninstallexe}; Components: AIDA64\2; IconFilename: {app}\2.ico;
Name: {group}\{cm:UninstallProgram,{#AIDA643}}; Filename: {uninstallexe}; Components: AIDA64\3; IconFilename: {app}\3.ico;

Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: AIDA64\1;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: AIDA64\2;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: AIDA64\3;

Name: {group}\Справка {#AIDA641}; Filename: {app}\aida64.chm; Components: AIDA64\1;
Name: {group}\Справка {#AIDA642}; Filename: {app}\aida64.chm; Components: AIDA64\2;
Name: {group}\Справка {#AIDA643}; Filename: {app}\aida64.chm; Components: AIDA64\3;

Name: {commondesktop}\{#AIDA641}; Filename: {app}\{#AIDA64EXE}; Components: icons\desktop and AIDA64\1;
Name: {commondesktop}\{#AIDA642}; Filename: {app}\{#AIDA64EXE}; Components: icons\desktop and AIDA64\2;
Name: {commondesktop}\{#AIDA643}; Filename: {app}\{#AIDA64EXE}; Components: icons\desktop and AIDA64\3;

Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA641}; Filename: {app}\{#AIDA64EXE}; Components: icons\quicklaunchicon and AIDA64\1;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA642}; Filename: {app}\{#AIDA64EXE}; Components: icons\quicklaunchicon and AIDA64\2;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA643}; Filename: {app}\{#AIDA64EXE}; Components: icons\quicklaunchicon and AIDA64\3;

[Run]
Filename: {app}\{#AIDA64EXE}; Description: "{cm:LaunchProgram,{#StringChange(AIDA641, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\1;
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\{#AIDA64EXE}"""; Flags: shellexec; Components: icons\quicklaunchicon7 and AIDA64\1;

Filename: {app}\{#AIDA64EXE}; Description: "{cm:LaunchProgram,{#StringChange(AIDA642, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\2;
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\{#AIDA64EXE}"""; Flags: shellexec; Components: icons\quicklaunchicon7 and AIDA64\2;

Filename: {app}\{#AIDA64EXE}; Description: "{cm:LaunchProgram,{#StringChange(AIDA643, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\3;
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\{#AIDA64EXE}"""; Flags: shellexec; Components: icons\quicklaunchicon7 and AIDA64\3;

[UninstallDelete]
Type: filesandordirs; Name: {app}\*;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
RT_RCDATA = 10;

var
ResultCode: Integer;
lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
BtnImage: TBitmapImage;
CheckLicense: TCheckBox;
iInitialize: Boolean;

function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
lResStream: TResourceStream;
begin
lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
finally
lResStream.Free;
Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
end;
end;
//////////////////////////////////// [Начало] Поменять страницы местами
function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;
/////////////////////////////////// [Конец] Поменять страницы местами
///////////////////////////////// [Начала] предварительное удаление только для твоего инсталла
function UninstallMyApp(): Boolean;
var
Buff: String;
i: Integer;
begin
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then Result := not FileExists(RemoveQuotes(Buff));
if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
try
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
finally
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
end;
end;

function InitializeSetup(): Boolean;
begin
Result := UninstallMyApp();
end;
///////////////////////////////// [Конец] предварительное удаление только для твоего инсталла
procedure InitializeWizard;
begin
///////////////////////////// [Начало] Каталоги в стиле от R. G. Catalyst
WizardForm.DiskSpaceLabel.Top := ScaleY(65);
WizardForm.DirBrowseButton.Top := ScaleY(36);
WizardForm.DirEdit.Top := ScaleY(37);
WizardForm.NoIconsCheck.Parent := WizardForm.SelectDirPage;
WizardForm.SelectDirLabel.Top := ScaleX(09)
WizardForm.SelectDirBitmapImage.Top := ScaleY(0)
WizardForm.SelectDirBrowseLabel.Visible := False
WizardForm.SelectGroupBitmapImage.Top := ScaleY(95);
WizardForm.SelectGroupBitmapImage.Parent := WizardForm.SelectDirPage;
WizardForm.GroupBrowseButton.Parent := WizardForm.SelectDirPage;
WizardForm.GroupBrowseButton.Top := ScaleY(133);
WizardForm.GroupEdit.Parent := WizardForm.SelectDirPage;
WizardForm.GroupEdit.Top := ScaleY(134);
WizardForm.SelectStartMenuFolderBrowseLabel.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderBrowseLabel.Top := ScaleY(170);
WizardForm.SelectStartMenuFolderLabel.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderLabel.Top := ScaleY(105);
/////////////////////////////// [Конец] Каталоги в стиле от R. G. Catalyst
/////////////////////////////// [начало] Поменять страницы местами
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage;
////////////////////////////// [Конец] Поменять страницы местами
with WizardForm do
begin
iInitialize := True;
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
begin
bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
WizardBitmapImage.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(WelcomePage.Handle);

bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
WizardBitmapImage2.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(FinishedPage.Handle);

lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
ImgApplyChanges(WizardForm.Handle);
end;

ExtractTemporaryFile('WinTB.dll');
SetTaskBarProgressValue(0, 60);
SetTaskBarProgressState(0, TBPF_ERROR);
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);

with TLabel.Create(WizardForm) do
begin
Parent:=WizardForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38));
end;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
/////////////////////////////// [начало] Поменять страницы местами
Case CurPageID of
wpSelectDir: if WizardForm.Tag = 1 then
begin
WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
end;
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
////////////////////////////// [Конец] Поменять страницы местами
////////////////////////////////// [Начало] Изменение пути установки в зависимости от выбранного компонента
if IsComponentSelected('AIDA64\1') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA641}';
WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA641}';
end else
if IsComponentSelected('AIDA64\2') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA642}'
WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA642}'
end else
if IsComponentSelected('AIDA64\3') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA643}'
WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA643}'
/////////////////////////////// [Конец] Изменение пути установки в зависимости от выбранного компонента
end;
end;
wpSelectTasks:
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
end;
end;

procedure DeinitializeSetup();
begin
if iInitialize then
begin
gdipShutdown;
TaskBarDestroy;
end;
end;

procedure InitializeUninstallProgressForm;
begin
with UninstallProgressForm do
begin
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
begin
lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
ImgApplyChanges(UninstallProgressForm.Handle);
end;

with TLabel.Create(nil) do
begin
Parent:=UninstallProgressForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38));
end;
end;
end;

procedure DeinitializeUninstall();
begin
gdipShutdown;
end;
[/more]
Автор: uncleslava
Дата сообщения: 27.11.2013 07:38
sjwrec
Спасибо .
Что то я это в справке найти не смог, пока имя функции не сказали.
Автор: icetanker
Дата сообщения: 27.11.2013 07:57
а можно ли сделать так.чтобы создавалась временная папка и удалялась после установки,он бы выполнял настройку браузера и устанавливал программу parser,которая вшита в sfx архив,parser при этом должен остаться
или перефразирую,мой sfx архив предназначен для настройки браузера и установки msxml parser
то есть при нажатие на него устанавливается только парсер,а настройки просто проставляются,а сейчас получается,что создается папка с uninstaller и еще с exe,она вообще не нужна,так как сам установщик уже проделал установку parsera и настройку браузера
в итоге должно быть activex включены+parser установлен


Добавлено:
[more]
Код: скрипт
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Security"
#define MyAppVersion "1.0"
#define MyAppPublisher "Center-Inform"
#define MyAppURL "http://www.center-inform.ru"
#define MyAppExeName "Security.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{BE9FA853-7367-49A8-90BD-73857BBEAFDA}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=Security\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputDir=C:\desktop\output
OutputBaseFilename=Security
SetupIconFile=C:\Users\user\Desktop\logos.ico
Compression=lzma
SolidCompression=yes
CreateAppDir = no

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

//////////////sfx архив расположен внутри
[Files]
Source: "security.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

[Code]
procedure MyAfterInstall();
var
ResultCode: Integer;
begin
begin
Exec(ExpandConstant('{app}\security.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end
end;
Автор: tuz1979
Дата сообщения: 28.11.2013 02:31
Ребята у меня такая проблема!
запускаю инсталлятор и устанавливаю компоненты которые мне надо.
Потом запускаю еще раз инсталлятор и снимаю галочки с тех компонентов которые я установил,мне выдает вот что

как сделать если я снимаю галочки с компонентов которые были установленные
то эти компоненты удалялись?
Автор: sjwrec
Дата сообщения: 28.11.2013 09:12
icetanker

В секцию Setup добавьте строку Uninstallable=no - это отключит создание деинсталлятора т.е экзешника в папке.
Автор: log1stable
Дата сообщения: 02.12.2013 04:52
Пихну это, в общем, на всеобщую проверку и оценку юзабилити и дизайна.
Что желательно бы проверить:
Мультиязычность
Работает ли фон, обычный прогрессбар и стандартные границы во втором варианте
Прилипание к краям после отпускания формы
Проверка наличия уже установленной игры(при повторной установке), удаления её
Проверка MD5-хешей (сперва проверить как есть, потом удалить любой файл из Data2(русская озвучка),Data3(русский интерфейс),Data4(пак обновлений 1).log1st - должен не пройти проверку удаленный файл + заблокируется чекбокс)
Выбор компонентов
Выбор папки (особенно проверить ошибку при выборе CD,DVD-Rom'a)
Сбор информации введенной
Установка (прогрессбар, текущий архив, текущий файл, оставшееся и прошедшее время)
Завершение(сбор информации)
Отмена на любой из стадий установки
Нестандартные месседжи (Описание, Ошибки, Вопросы)

Ссылка на скачку

Как только закончится тестирование и допиливание, выложу скрипт во всеобщий доступ.
[more=Подробнее о скрипте]
Inno Setup Script от log1st:
Используемые библиотеки:
Bass
Botva2
CallbackCtrl
ISDone
ISMd5
Unarc (ISDone)
Распаковка: ISDone
Фичи:
Измененная страница выбора языка (юзая CustomMessages и Languages)
Измененный месседж-бокс (с прозрачной главной формой на время показа)
"Умный" инсталлятор: если уже установлена игра(проверка через реестр), то на выбор: удалить, играть, закрыть.
Фон, включаемый директивой #define ShowBG
Два стиля прогрессбара: делениями и обычный (включение обычного через директиву #define SimplePB)
Прозрачные границы через Fairy
Страницы (Приветствие, проверка md5, системные требования, компоненты, директории, подготовка, установка, завершение)
Статус-панель и страница с динамической генерацией страниц через свою процедуру AddStatusLabel
Музыка с кнопкой и ползунком
Кнопки через ботву
"Прилипание" к краям экрана
Проверка системных требований через модуль HWREQ (стилизованная таблица)
Включение стандартных границ одной директивой #define ShowBorder
Проверка MD5-хешей (c выводом непрошедших проверку в TLabel)
Компоненты через чекбоксы ботвы (если файл компонента не прошёл проверку md5, то компонент блокируется)
Выбор папки установки через FolderTreeView (в скором времени допишу парсер, и будет выбор через него, т. к. стандартный компонент не подходит под стиль страницы)
Сбор введенной информации (Компоненты, Папка установки)
Прогресс установки (Лейбл файла, лейбл архива, лейбл оставшегося времени, лейбл прошедшего времени, прогрессбар установки)
Завершение установки с выводом папки установки, возможности запуска через ярлыки(исходя из компонентов), прошедшего времени.
Исходники:
Скрипт Inno Setup в .iss
Все изображения Adobe Photoshop в .psd (от кнопок до иконки)

Скриншоты:

[/more]
Автор: 0Vovan0
Дата сообщения: 02.12.2013 15:21
Как извлечь пароль которым инсталлер распаковывает ресурсы *.bin?
Автор: tahirg
Дата сообщения: 02.12.2013 18:28
мой вопрос не решаем?
Автор: uncleslava
Дата сообщения: 03.12.2013 05:44
Кто нибудь знает, можно ли отключить окна всплывающие по завершению деинсталяции: "Программа ... была полностью удалена с Вашего компьютера" и "Деинсталляция ... завершена. Часть элементов не удалось удалить. Вы можете удалить их самостоятельно"?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

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


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