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

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

Автор: dragon1000
Дата сообщения: 24.11.2014 06:42
Доброго времени суток уважаемые пользователи, хотел у вас узнать следующий момент:

Есть окно инсталлятора, оно без рамки и его фон выполнен с помощью картинки.

Код:
WizardForm.BorderStyle:=bsNone;
Автор: Renua
Дата сообщения: 24.11.2014 11:36
добрый день. прошу вашей помощи.
необходимо сделать так, чтоб ПО ставилось и в winxp и в win7. в winxp, все ставиться нормально, а вот под win7 не устанавливаются аддоны.и в каком месте надо применить /silent /verysilent, чтоб firefox ставился в тихом режиме?
[Setup]
AppName=Mozilla Firefox
AppVerName=Mozilla Firefox 31.2.0
DefaultDirName={sd}\ff_set6
OutputBaseFilename=ff_set6
OutputDir=D:\
SetupIconFile=Icon\ff_set.ico
VersionInfoVersion=31.2.0
DisableDirPage=yes
DirExistsWarning=no
Uninstallable=no
WizardImageFile=Icon\ff_big_image.bmp
WizardSmallImageFile=Icon\ff_small_image.bmp
Compression=lzma2/ultra
SolidCompression=yes
PrivilegesRequired=admin

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;


[Files]
; Основные файлы
Source: "Distrib\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs;
Source: "upd_ext\ff_postinst.cmd"; DestDir: "{sd}"; Flags: ignoreversion;
Source: "upd_ext\upd_ext.exe"; DestDir: "{app}\core"; Flags: ignoreversion;
; Ярлыки
Source: "ini\setup2.ini"; DestDir: "{app}"; DestName: "setup.ini"; Flags: ignoreversion;

; Основные расширения и темы
Source: "profile\prefs1.js"; DestDir: "{app}\core\defaults\profile"; DestName: "prefs.js"; Flags: ignoreversion
Source: "extensions\{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}"; Flags: ignoreversion recursesubdirs
Source: "adblockplus\patterns.ini"; DestDir: "{app}\core\defaults\profile\adblockplus"; Flags: ignoreversion
Source: "extensions\adblockpopups@jessehakanen.net\*"; DestDir: "{app}\core\defaults\profile\extensions\adblockpopups@jessehakanen.net"; Flags: ignoreversion recursesubdirs
Source: "extensions\elemhidehelper@adblockplus.org\*"; DestDir: "{app}\core\defaults\profile\extensions\elemhidehelper@adblockplus.org"; Flags: ignoreversion recursesubdirs
Source: "extensions\{d40f5e7b-d2cf-4856-b441-cc613eeffbe3}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{d40f5e7b-d2cf-4856-b441-cc613eeffbe3}"; Flags: ignoreversion recursesubdirs
Source: "extensions\{dc572301-7619-498c-a57d-39143191b318}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{dc572301-7619-498c-a57d-39143191b318}"; Flags: ignoreversion recursesubdirs
;Source: "extensions\{D46E8522-6E86-44b1-A622-58C0668AD78E}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{D46E8522-6E86-44b1-A622-58C0668AD78E}"; Flags: ignoreversion recursesubdirs; Components: Main_Addons\Classic_Compact
;Source: "extensions\notreal.ccoptions@environmentalchemistry.com\*"; DestDir: "{app}\core\defaults\profile\extensions\notreal.ccoptions@environmentalchemistry.com"; Flags: ignoreversion recursesubdirs; Components: Main_Addons\Classic_Compact\Classic_Compact_Settings
;Source: "profile\prefs2.js"; DestDir: "{app}\core\defaults\profile"; DestName: "prefs.js"; Flags: ignoreversion; Components: Main_Addons\Classic_Compact
; Дополнительные расширения и темы
Source: "extensions\{73a6fe31-595d-460b-a920-fcc0f8843232}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{73a6fe31-595d-460b-a920-fcc0f8843232}"; Flags: ignoreversion recursesubdirs
Source: "extensions\{64161300-e22b-11db-8314-0800200c9a66}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{64161300-e22b-11db-8314-0800200c9a66}"; Flags: ignoreversion recursesubdirs
Source: "extensions\{a0d7ccb3-214d-498b-b4aa-0e8fda9a7bf7}\*"; DestDir: "{app}\core\defaults\profile\extensions\{{a0d7ccb3-214d-498b-b4aa-0e8fda9a7bf7}"; Flags: ignoreversion recursesubdirs
; Настройка расширений
Source: "upd_ext\extensions1.json"; DestDir: "{app}\core\defaults\profile"; DestName: "extensions.json"; Flags: ignoreversion
Source: "upd_ext\extensions2.json"; DestDir: "{app}\core\defaults\profile"; DestName: "extensions.json"; Flags: ignoreversion
Source: "upd_ext\upd_ext_all.txt"; DestDir: "{sd}"; Flags: ignoreversion

[Run]
Filename: "{sys}\cmd.exe"; Parameters: "/c move /y {src}\prefs.js {app}\core\defaults\profile\prefs.js /silent"; WorkingDir: "{src}"; Flags: runhidden
Filename: "{sys}\cmd.exe"; Parameters: "/c move /y {src}\bookmarks.html {app}\core\defaults\profile\bookmarks.html /silent"; WorkingDir: "{src}"; Flags: runhidden
Filename: "{app}\setup.exe"; Parameters: "/INI={app}\setup.ini /silent"; WorkingDir: "{app}"; StatusMsg: "Установка программы";
Filename: "{sd}\ff_postinst.cmd"; Parameters: "/silent";WorkingDir: "{sd}"; Description: "Настройка расширений"; Flags: runhidden skipifdoesntexist

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Автор: AngelNet
Дата сообщения: 24.11.2014 22:04
Renua
простынку кода уберите под теги MORE, см. правила топика в шапке! п. 4.6 часть 2.
Автор: Sampron
Дата сообщения: 27.11.2014 00:12
dragon1000
В обычной версии в TBitmapImage не зарегистрировано свойство OnMouseDown.
Можно повесить на картинку прозрачный лейбл.
[more=код]
function ReleaseCapture: Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
end;

procedure InitializeWizard();
var
Lbl: TLabel;
begin
Lbl := TLabel.Create(WizardForm);
Lbl.SetBounds(WizardForm.WizardBitmapImage.Left, WizardForm.WizardBitmapImage.Top, WizardForm.WizardBitmapImage.Width, WizardForm.WizardBitmapImage.Height)
Lbl.AutoSize := False
Lbl.Transparent:=True
Lbl.OnMouseDown := @LabelOnMouseDown
Lbl.Parent := WizardForm.WizardBitmapImage.Parent;
end;
[/more]
Автор: dragon1000
Дата сообщения: 27.11.2014 06:47

Цитата:
Можно повесить на картинку прозрачный лейбл.
код


Sampron, благодарю за ответ.

P.S.: Как по мне эти китайцы хитрожопые насовали кучу полезных процедур себе в модифицированную версию компилятора, и попросту забросили. Вместо того чтобы все разместить как остальные в подключаемые библиотеки.
Автор: BUU
Дата сообщения: 27.11.2014 19:36
Всем привет, давно сюда не писал
В общем есть такой код который запретит установку в папками с файлами, мол файлы есть в этой папке, выберите другую пустую папку для установки, спс заранее за ответ
Автор: Kindly
Дата сообщения: 28.11.2014 14:55
BUU, гораздо проще и быстрее проверять не внутри папки файлы (это может занять длительный процесс при использовании FindFirst/FindNext при большом количестве файлов и подпапок), а саму папку, если она существует:

Код: function NextButtonClick(CurPage: Integer): Boolean;
var
s2: string;
begin
Result:=True;
if CurPage=wpSelectDir then
begin
s2:=ExpandConstant('{app}')+'';
if DirExists(s2) then
begin
MsgBox('Installation in existing folder is not possible!', mbError, mb_Ok);
Result:=False;
end;
end;
end;
Автор: CUTA
Дата сообщения: 28.11.2014 15:48
Всем здравствуйте!
Прошу помощи знающих людей!
В секции код есть такой скрипт:
[more][Code]

procedure InitProgressBar(hwnd:thandle; l,t,w,h,speed:integer; clFore, clBack: integer); external 'InitProgressBar@files:IsProgressBar.dll stdcall';
procedure DeinitProgressBar; external 'DeinitProgressBar@files:IsProgressBar.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageId = wpInstalling then
begin
InitProgressBar(WizardForm.Handle, 40, 114, 418, 21, 100, clgreen, clwhite)
end;
end;

procedure DeinitializeSetup();
begin
DeinitProgressBar;
end;[/more]

При выполнении этого кода на месте процесс бара анимация полосы прогресса. По завершении выполнения задач из секции RUN на странице завершение работы мастера анимация остаётся.
Вопрос как отключить анимацию на странице завершение работы мастера?
Автор: Kindly
Дата сообщения: 28.11.2014 15:59
CUTA
очевидно, что деинициализировать раньше, чем после окончания установки.

Код: procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageId = wpInstalling then
begin
InitProgressBar(WizardForm.Handle, 40, 114, 418, 21, 100, clgreen, clwhite)
end;
If CurPageId = wpFinished then
begin
DeinitProgressBar;
end;
end;
Автор: CUTA
Дата сообщения: 28.11.2014 16:01
Kindly
Я вас не совсем понял
Деинсталлятора нет в скрипте.
Автор: Kindly
Дата сообщения: 28.11.2014 16:11
CUTA, где я говорил про деинсталлятор? был задан вопрос:

Цитата:
Вопрос как отключить анимацию на странице завершение работы мастера?
на который дан ответ в виде дополнительного кода.
Автор: CUTA
Дата сообщения: 28.11.2014 16:23
Kindly
Я прошу прощения, просто код на странице не сразу появился.
Большое вам спасибо всё работает как надо
Автор: BUU
Дата сообщения: 28.11.2014 16:28
MsgBox('Installation in existing folder is not possible!', mbError, mb_Ok);

А можно текст написать, чтоб понятно было, что нельзя в эту папку или как там нельзя с файлами, запутался ((
Автор: Igimon
Дата сообщения: 28.11.2014 21:06
Подскажите пожалуйста, как сделать данный скрипт, чтобы при условии, если пользователь выберет удалить, установка бы запускала деинсталятор и закрывалась, а при условии отказа исталлятор бы продолжил свою работу.


Код:
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\MY_PROGRAM', 'UninstallString', ResultStr)
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Вы действительно хотите удалить MY_PROGRAM и все компоненты программы?', mbconfirmation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
Автор: Kindly
Дата сообщения: 28.11.2014 21:14
Igimon, наверное, так:


Код: case MsgBox('Вы действительно хотите удалить MY_PROGRAM и все компоненты программы?', mbconfirmation, MB_YESNO) of
IDNO:
begin
Result:=True;
end;
IDYES:
begin
// удаление
end;
Автор: Igimon
Дата сообщения: 28.11.2014 21:34
Kindly
Все равно запускает установку после удаления..


Код:
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\MY_PROGRAM', 'UninstallString', ResultStr)
then
begin
ResultStr:=RemoveQuotes(ResultStr);
case MsgBox('Вы действительно хотите удалить MY_PROGRAM и все компоненты программы?', mbconfirmation, MB_YESNO) of
IDNO:
begin
Result:=True;
end;
IDYES:
begin
// удаление
end;
if not Exec(ResultStr, '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;
end;
Автор: Kindly
Дата сообщения: 28.11.2014 21:43
Igimon
нужно тогда в
IDYES:
begin
// удаление
Result := False;
end;

и код удаления нужно прописывать сверху Result := False; если что
Автор: Igimon
Дата сообщения: 28.11.2014 22:01
Kindly

Цитата:
и код удаления нужно прописывать сверху Result := False; если что


Спасибо! с False вверху, все работает!

Если можно еще два вопроса, строчку QuietUninstallString инсталлятор не подхватывает только корректно работает с UninstallString, в принципе решил этот вопрос так:

if not Exec(ResultStr, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)

а как напрямую задействовать

If RegQueryStringValue(HKLM, 'SOFTWARE\MY_PROGRAM', 'QuietUninstallString', ResultStr)

?

И второй вопрос, при выводе попуп с вопросом


MsgBox('Вы действительно хотите удалить MY_PROGRAM и все компоненты программы?', mbconfirmation, MB_YESNO) of

названия окна - Установка, как задать другое название попупа с вопроса?
Автор: Kindly
Дата сообщения: 28.11.2014 22:10

Цитата:
строчку QuietUninstallString инсталлятор не подхватывает
попробуй использовать Unicode версию InnoSetup, насколько я понимаю.


Цитата:
как задать другое название попупа с вопроса?
может быть так, если правильно уловил суть:

Код: const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;    
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
var
hWnd: Integer;
begin
Cancel:=False;
Confirm:=False;
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if MessageBox(hWnd, 'The setup is not finished! Do you really want to abort?', 'Exit from Installer', MB_YESNO or $30) = idYes then
Cancel:=true;
end;
Автор: BUU
Дата сообщения: 29.11.2014 13:10
Kindly
Код не работает, как не проверял папки и так пропускает проверку, можно было лучше тот код с проверкой на файлы в папке, хотя проверку на основные по маске
Автор: Kindly
Дата сообщения: 29.11.2014 13:14
BUU
Цитата:
Код не работает
тогда нет смысла давать код на проверку файлов по маске в папке, он тоже не будет работать.
Автор: AngelNet
Дата сообщения: 29.11.2014 14:27
кто нибудь может проверить использование AnsiString для istask.dll в юникод версии?
я пока не могу найти живой дистр инно ультра( сайт автора был на вордпрессе и он взломан, оттуда в данный момент не качается (отписал ему о проблеме).
у меня же стоит анси версия и я не могу проверить сам(

p.s. ищу дистр InnoUltra самый свежий, мб у кого то завалялся.
Автор: Kindly
Дата сообщения: 29.11.2014 16:06
AngelNet, ты что такой ленивый, возьми да и проверь.
я же тебе дал пример использования.
если так каждый перестанет соображать и переспрашивать одно и тоже, так никогда и не научитесь включать свой мозг. теперь я начинаю понимать, почему былые "мэтры" в этой теме появляются редко.
Автор: nik1967
Дата сообщения: 29.11.2014 17:12

Цитата:
ищу дистр InnoUltra самый свежий

А что он из себя представляет? Могу поделиться своим Inno 5.5.1.ee2(u)
Автор: AngelNet
Дата сообщения: 29.11.2014 18:41
Kindly
я поясняю ситауцию для тех кто не понял:
у меня стоит АНСИ версия, мне нужна юникодовая но дистра у меня не сохранилось и его источник в тырнете сдох!
как только он у меня появится так сразу сам и проверю, а пока я в поисках ибо автор сайта неделю молчит как уже...

Добавлено:
nik1967
представляет примерно это:

и состав компонентов:

эдакий суповой набор ништяков на все случаи жизни -)
Автор: Kindly
Дата сообщения: 29.11.2014 20:48
AngelNet
Цитата:
у меня стоит АНСИ версия, мне нужна юникодовая но дистра у меня не сохранилось и его источник в тырнете сдох!

http://files.jrsoftware.org/is/5/isetup-5.5.5-unicode.exe
автор dll Genri, он много полезного здесь когда-то сделал, и у него вроде не было сайта.
Автор: Mazozazo
Дата сообщения: 30.11.2014 10:08
как с инстолятора удалить в меню инфу о inno? и добавить туда свое?
Автор: nortem
Дата сообщения: 30.11.2014 17:35
Помогите, такой трабл в скрипте (модуле ботвы)
Unknown Identifier 'ExtractTemporaryFileSize'
Автор: innonewbie
Дата сообщения: 30.11.2014 18:23
Mazozazo, пробуй: Ссылка. Пример от nik1967 для расширенной версии inno setup, для "обычной" вроде нужно добавить в начало секции [Code]
type
HMENU = Cardinal;
Автор: nortem
Дата сообщения: 30.11.2014 19:25
ХЕЛП!

Добавлено:
скрипт http://rghost.ru/59352693
Помогите, такой трабл в скрипте (модуле ботвы)
Unknown Identifier 'ExtractTemporaryFileSize

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

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


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