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

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

Автор: equis
Дата сообщения: 16.04.2008 19:31
Unpacker вряд ли совсем загнулся, но и с обновлением у автора особой спешки нет.
Дядя на форуме ясно дал понять, что неплохо бы ему найти спонсора, тогда б он горы свернул, да еще б к nsis полноценный unpacker замутил. А так ему интерес небольшой, панимаешь...
Автор: boss911
Дата сообщения: 16.04.2008 21:04
equis

Цитата:
А так ему интерес небольшой, панимаешь...

Панимать, очень панимать, время сейчас такое.
Автор: equis
Дата сообщения: 16.04.2008 21:47
Впрочем, наши талантливые китаеговорящие друзья еще в конце марта подсуетились и сработали для себя v0.23. Вот ссылка на пакет (привожу все файлы как есть, выкинул только ридми на китайском):

innounp v0.23

Внутри собственно сам innounp 0.23, InnoGui (программная оболочка с поддержкой всех команд - увы, на китайском), InnounpW (дополнение к оболочке InnoGui, делает интерфейс английским, но требует .NET 1.1), ISUnp (Inno Setup Unpacker Explorer) и файлик reg.dat (это для меню в проводнике: по умолчанию предполагает, что все файлы распакованы в папку "C:\Program Files\Inno Setup Unpacker". Если у reg.dat переименовать расширение в .reg и добавить в реестр, будут доступны команды вызова InnoGui и ISUnp. Файл этот можно отредактировать под себя, заменив путь и InnoGui на InnounpW. Хотя все же проще кинуть innounp в Universal Extractor).
Автор: Sampron
Дата сообщения: 16.04.2008 22:06
tatuich

Цитата:
- Создать копию файла struct5110.pas и назвать struct5203.pas

Немного поправлю:
Копию файла struct5110.pas не нужно делать, нужно скачать сорцы inno setup 5.2.3 с них взять оригинальный struct.pas и его переименовать в struct5203.pas а также первую строку в файле (unit Struct5203;) и потом:

Цитата:
- запустить prep.bat
- собрать (build) и скомпилировать innounp.dpr в delphi

А это лишнее:

Цитата:
- В struct5203.pas во всех строках заменить '5.1.10' на '5.2.03'
- Поменять в файле struct5203.pas строку '5.1.0' на '5.2.0'

Попробовал вроде пашет, вобщем тестируйте: http://data.cod.ru/62693735882


Автор: boss911
Дата сообщения: 17.04.2008 01:04
Sampron

Цитата:
Попробовал вроде пашет, вобщем тестируйте: http://data.cod.ru/62693735882

Вот что получил при распаковки оригинального isetup-5.2.3.exe и при использовании GUI IsUnp Explorer 1.0.



Или напрямую через коммандную строку:

Цитата:
C:\innounp.exe -x C:\isetup-5.2.3.exe
; Version detected: 5203
#1 {app}\license.txt
Reading slice C:\isetup-5.2.3.exe
#2 {app}\ISetup.chm
#3 {app}\Compil32.exe
Error (Exception) "The source file is corrupted" at address 0043E366
Автор: valeron87
Дата сообщения: 17.04.2008 01:13
Вставлю и свои 5 копеек.
Года 2 назад во времена InnoSetup 5.1.5 я решил написать свою программу для распаковки этих инсталлеров. Перелопатил исходники самого InnoSetup, несколько ночей не спал, а программил. Вот и получилось это чудо На данный момент она поддерживает распаковку версий с 5.0.4 до 5.2.3.
Может кому-то и пригодится: http://ifolder.ru/6192841
Если есть какие-то вопросы или предложения по программе - пишите в ПМ.
Автор: elapse
Дата сообщения: 17.04.2008 01:38
valeron87, исходники, пожалуйста, выложи, если возможно...
Автор: boss911
Дата сообщения: 17.04.2008 01:53
valeron87

Очень интересная программа, все удобно реализовано, я таки прям был удивлен. Респект!
Маленькое пожелание: реализовать во вкладке 'Файлы' функцию выделения всех файлов по Ctrl+A.

Добавлено:
Заметил косяк!


Код: Source: File.cfg; DestDir: {userappdata}\Prog; Check: CheckComputerName
Source: File2.cfg; DestDir: {userappdata}\Prog; DestName: File.cfg; Check: Not CheckComputerName
Автор: Sampron
Дата сообщения: 17.04.2008 02:23
boss911

Цитата:
Вот что получил при распаковки оригинального isetup-5.2.3.exe и при использовании GUI IsUnp Explorer 1.0.

Да, есть глюк, лучше использовать китайскую сборку или сборку от valeron87 у него вобще круто вышло!

Автор: boss911
Дата сообщения: 17.04.2008 02:37
Sampron

Цитата:
Да, есть глюк

А в чем же дело? Хотелось бы разобраться, чтобы на будущие не ждать обновления анпакеров и самому компилить. Если опубликовал кто-то такой способ, значит, у него он сработал, я так думаю.

Добавлено:

Цитата:
лучше использовать китайскую сборку

Я бы не сказал, что лучше. Запусти с консоли ее, увидим бред, который очень похож на их язык, с такими же именем (каракули) получаем скрипт. Нахрен было переписывать все на свои дрючки.
Автор: equis
Дата сообщения: 17.04.2008 03:52
valeron87
Где ты раньше был? Отличная вещь получилась. Она не только удобная, но даже инфы больше выдает из инстала. Молодец!

Цитата:
Если опубликовал кто-то такой способ, значит, у него он сработал, я так думаю.

Он либо вносил доп изменения в код, о чем "забыл" упомянуть, либо проверял свой способ на паре простеньких инсталляторов.

Цитата:
Я бы не сказал, что лучше. Запусти с консоли ее, увидим бред, который очень похож на их язык, с такими же именем (каракули) получаем скрипт.

boss911, пардон, но тут ты погорчился.
К твоему сведению, эта китайская сборка обладает расширенной функциональностью по сравнению с оригинальным innounp, корректно распознает различные версии и вариации инсталляторов Inno, поддерживает доп ключи, что повышает вероятность корректной распаковки в сложных случаях и в работе с запароленными инсталами. А все описания к утилите давно документированы, так что пусть не смущают эти каракули.

All
А кому-нить приходилось на пятых версиях Inno назначать отдельные иконки для setup и uninstall? Какие варианты?
Автор: VikLabel
Дата сообщения: 17.04.2008 08:51
Помогите разобраться! Не работает такой код:

[Setup]
AppName=qqq
AppVerName=3.0
OutputBaseFilename=Setup
AlwaysShowComponentsList=false
DefaultDirName={pf}\qqq
DisableDirPage=true
DisableFinishedPage=true
DisableReadyPage=true
DisableStartupPrompt=true
Uninstallable=false
UsePreviousGroup=false
ShowLanguageDialog=no
LanguageDetectionMethod=locale
AppendDefaultGroupName=false
OutputDir=Setup
CreateAppDir=true
DisableProgramGroupPage=true

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
...
...
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
//WizardForm.NextButton.OnClick(WizardForm.NextButton); // работает, но следующая страничка, которая с прогрессом не показывается, на панели задач установку видно.
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0); // не работает
end;
end;

По любому появляется страница с текстом - Вас приветствует мастер установки ....
Как убрать эту страницу и сразу перейти к странице с прогрессом, т.е. начать установку?
Автор: omals
Дата сообщения: 17.04.2008 09:33
вопрос по параметрам командной строки компилятора
есть батник
шото например такое
set COMPILER="\\wserver\D$\Programs\Inno Setup 5\Compil32.exe" /cc
set BASEFOLDER=\\wserver\E$\WorkProjects\Project1
%COMPILER% %BASEFOLDER%\install\Project1.iss

предварительно скопировав нужные файлы на сервер
любой разработчик може запустив этот батник скомпилить инсталку
но есть маленькая проблема
в коде Project1.iss есть
#define MyVer GetFileVersion('..\app\Project1.dll')
[Setup]
VersionInfoVersion={#MyVer}
так вот не может он определить версию (ставит 0.0.0.0 - тоесть не вытянул из версии длл)
а если задать прямо
#define MyVer GetFileVersion('\\wserver\E$\WorkProjects\Project1\app\Project1.dll')
то все работает, но это не совсем корректно
всегда желательно шоб пути в скрипте были относительными
пробовал и с ISCC.exe, а не Compil32.exe
таже фигня

может у когото есть идеи???
Автор: denisska80
Дата сообщения: 17.04.2008 10:21
Не могли бы вы ответить на следующие вопросы.
1. Необходимо дать пользователю во время выбора папки для установки программы давать еще выбор 2-3 директорий где находятся определенные файлы(при этом при нажатии кнопки Далее проверить есть ли такие файлы).
2. Необходимо запустить файл с параметрами в команддной строке, ну или не в командной)) Т.е. допустим не sqlplus.exe а "sqlplus.exe user/pass@db". Простой файл запускает без проблем, а вот на параметры ругается.

Заранее спасибо за ответы)
Автор: EagleSH
Дата сообщения: 17.04.2008 11:19
VikLabel
setup.exe /silent
виден только прогресс бар

setup.exe /verysilent
нифига не видно
Автор: boss911
Дата сообщения: 17.04.2008 15:38
equis

Цитата:
эта китайская сборка обладает расширенной функциональностью

Функционал, который скрыт под китайскими символами. Я даже не могу глянуть какие ключи, что означают, так хоть подглядывал иногда. Ладно, и на том спасибо китайцам.

Ок, а есть у них свой оф. сайт innounp'a, чтобы знать, где обновляться? Конечно, можно было бы юзать прогу от valeron87, но она не все файлы распаковывает, как я выяснил.
Автор: tatuich
Дата сообщения: 17.04.2008 15:56
Есть вопрос - китайский анпакер и анпакер valeron'а после распаковки ложат скрипт рядом с распакованными файлами, как это делает innounp 0.19 оригинальный.
Автор: equis
Дата сообщения: 17.04.2008 16:58

Цитата:
Конечно, можно было бы юзать прогу от valeron87, но она не все файлы распаковывает, как я выяснил.

Будем надеяться, что valeron87 чуток доработает свою замечательную сборку.

Цитата:
Ок, а есть у них свой оф. сайт innounp'a, чтобы знать, где обновляться?

Я брал его на одном китайском портале, где выкладываются разные подобные утилиты. Насчет оф сайта неизвестно.

Цитата:
Функционал, который скрыт под китайскими символами. Я даже не могу глянуть какие ключи, что означают, так хоть подглядывал иногда.

Для этих целей в архиве есть файл innounp.htm со стандартной документацией на релиз v0.19. Можно подглядывать туда.

Перевод китайского хелпа дал следующее...
Китайская сборка поддерживает три доп ключа:

Код: -r[xxxx] repair - Восстановление версии упаковщика. Позволяет принудительно указать версию упаковщика, сообщая innounp, каким скриптом распаковывать инсталлятор. Вводятся четыре цифры без точек и пробелов, напр. -r5110. Полезен при работе с нестандартными инсталляторами, а также при ошибочном определении версии упаковщика.
-s1..12 scan depth - Глубина сканирования. Полезен, если неизвестно или невозможно определить, какой версией Inno упакован пакет. Улучшает шансы на корректную распаковку при работе с нестандартными и запароленными инсталляторами, а также в случаях с модифицированными лоадерами SetupLdr.e32. Задается цифрами от 1 до 12. Рекомендуемое значение -s10.
-k extended scan - Расширенное сканирование. Используется, если не удается определить версию упаковщика другими средствами. Сканирует заголовок пакета и подбирает скрипты распаковки, начиная от наиболее позднего к ранним, пока не отыщется корректно работающий. Ключи -s и -r в таком случае не используются.
Автор: firefly2005
Дата сообщения: 18.04.2008 01:32
Вопросы глупые у меня. Но с остальным я за день разобрался, а вот с этим не получается.

1) Как при деинсталлировании (удалении) программы- заставить деинсталлятор спросить пользователя удалять сохранения игр и дополнительные карты или оставить.

Через это [UninstallDelete] Type: filesandordirs; Name: {app}\Map
всю папку удаляет.
да уж, ЗЫ: вроде понял что, через процедуру CurStepChanged работать, но вот реализация. Что-нибудь вроде формы и галочек-чекбоксов для реализации этих функция в Inno Setup имеется?

2) Как создать uninstall.exe "сборный" -т.е. я проинсталлировал игру, потом карты, потом ещё что-то отдельным инсталлятором. Как прописать в единый uninstall.exe эти все этапы для послед. деинсталляции все кучей.
Эти строки не срабатывают,
Uninstallable=yes
UninstallLogMode=append
UpdateUninstallLogAppName=yes
всё равно создаются отдельные деинсталляторы 00, 01, 02. Хотя в описании пишут

Цитата:
Appending to Existing Uninstall Logs
Когда новая версия приложения устанавливается поверх уже установленной, вместо создания нового файла деинсталляции (unins???.dat), инсталлятор по умолчанию найдет и дополнит существующий деинсталлятор, принадлежащий тому же приложению и находящийся в той же папке. Если так, то когда приложение удаляется, изменения, сделанные различными инсталляторами, будут отменены (начиная с самой последней установки).
Автор: boss911
Дата сообщения: 18.04.2008 03:04
equis

Цитата:
Я брал его на одном китайском портале, где выкладываются разные подобные утилиты. Насчет оф сайта неизвестно.

Ясно, если что будем к тебе обращаться за обновлениями.
Автор: GRom V
Дата сообщения: 18.04.2008 08:02
Можно ли сделать чтоб после установки инсталлятор сам удалился?
Автор: denisska80
Дата сообщения: 18.04.2008 10:28
необходимо проверить, правильно ли пользователь приконнектился к БД. Я пытаюсь подконнеутиться, если получается-создаю текстовой файл. Затем проверяю, если он существует, значит все введено правильно. Проблема следующая в отладчике по шагам все работает идеально. Стоит запустить инсталлятор без отладчика, то праильные данные он воспринимает через раз. Т.е. периодически выскакивает "Не тот пароль".
В чем может быть проблема?

if (CurPage=102) then
begin
if Exec(DataDirPage.Values[0]+'\sqlplus.exe', PageLogon.Values[0]+'/'+PageLogon.Values[1]+'@'+PageLogon.Values[2]+' @c:/d.sql', '', SW_HIDE, ewNoWait, ResultCode)=false then
begin
Exec(ExpandConstant('{sys}\taskkill.exe'), '/F /IM PLUS80.exe', '', SW_HIDE,ewNoWait, ResultCode);
MsgBox('Не тот пароль', mbError, mb_OK);
Result:= False;
end
else
begin
if fileexists('c:\proba.txt') then
begin
Result:=True;
deletefile('c:\proba.txt');
end
else
begin
Result:=False;
MsgBox('Не тот пароль.', mbError, mb_OK);
end;
Exec(ExpandConstant('{sys}\taskkill.exe'), '/F /IM PLUS80.exe', '', SW_HIDE,ewNoWait, ResultCode);
end;
end;
Автор: denisska80
Дата сообщения: 18.04.2008 16:44
Решил проблему по-другому.
Подскажите, а как мне сформировать в [code] переменные и передать их в другие секции(files,icon), чтобы в code найти необходимые параметры для запуска файлов и создания иконок? И как можно создать ярлык на рабочем столе на неустановленный файл?
Автор: equis
Дата сообщения: 18.04.2008 16:56
boss911
Ну если пришлют новую ссылочку, конечно выложу. А так я особо тоже не слежу.
Автор: valeron87
Дата сообщения: 18.04.2008 20:47
Проверил свою прогу. При распаковке через "Сохранить файлы", она просто проходит по списку файлов и извлекает их подряд, перезаписывая файлы, если их имена совпадают. Поэтому здесь, конечно, будут такие глюки. Вообще этим режимом ("Сохранить файлы") я пользуюсь только, когда нужно извлечь несколько файлов, а не стоит задача распаковать весь инсталл. Поэтому мне такое поведение распаковщика совершенно не мешает.

Для того, чтобы при распаковке не потерялось ни одного файла, надо пользоваться кнопкой "Сохранить проект". Только в этом случае полученный скрипт будет соответствовать расположению распакованных папок и файлов (т.к. программа не просто выдает список файлов, но и группирует их по папкам)

ЗЫ: Конечно, я добавлю запрос о перезаписи файла в режиме "Сохранить файлы", но пока у меня на это совершенно нет времени.
Автор: geranik
Дата сообщения: 18.04.2008 23:19
Как в лог установки добавить размер файла?
Хех [more=уже]
[files]
....; AfterInstall: ExtLog()

[code]
procedure ExtLog();
var
size: integer;
begin
FileSize(ExpandConstant(CurrentFileName), size);
SaveStringToFile(ExpandConstant('{sd}\лог.log'), #13#10 +IntToStr(size), true);
end; [/more] не надо.
Автор: Skullboy
Дата сообщения: 19.04.2008 02:11
Люди, помогите! Научите делать меня сетапы с распаковкой, т.е. когда устанавливается
приложение, а потом вылазит окошко Extracting. Буду очень благодарен!
Автор: Victor_Dobrov
Дата сообщения: 19.04.2008 04:38
valeron87, неплохо бы, чтобы твой InnoUnPacker извлекал сырой код в виде CompiledCode.bin...

Skullboy, окошко Extracting (Распаковка) - это SFX-архив 7-Zip, включенный в инсталлятор и запускаемый с ключом -Y

О загрузке jpg, png, gif и прочих графических файлов через ImgGdiPlus.dll.
Собрал [more=скрипт]
#define Background "Background.jpg"

[Setup]
AppName=Image Stream
AppVerName=Image Stream
CreateAppDir=false
WindowVisible=true

[Files]
Source: {#Background}; Flags: dontcopy noencryption
Source: ImgGdiplus.dll; Flags: dontcopy noencryption

[Code]
type
hDC = Longint;
TSIZE = record cx: UINT; cy: UINT; end;

const
SRCCOPY = $CC0020;

var
ImageStream: Longint;
Size, MainSize: TSize;
WinDC: hDC;

function GetDC(Wnd: HWnd): hDC; external 'GetDC@user32.dll stdcall';
function ReleaseDC(Wnd: HWnd; DC: hDC): Longint; external 'ReleaseDC@user32.dll stdcall';
function LoadPicture(Sw: TSize; name: PChar): Longint; external '_LoadPicture@8@files:ImgGdiplus.dll stdcall delayload';
procedure StretchImg(LoadedImage, hDC: Longint; dstX, dstY, dstXE, dstYE, srcX, srcY, srcXE, srcYE: integer; dwROP: DWord); external '_StretchImg@44@files:ImgGdiplus.dll stdcall delayload';
procedure ReleaseImg(LoadedImage: Longint); external '_ReleaseImg@4@files:ImgGdiplus.dll stdcall delayload';

procedure InitializeWizard;
begin

    ExtractTemporaryFile('{#Background}');

//    MainForm.BorderStyle:= bsNone    { при этом изображение исчезает!}

    SIZE.cx:= MainForm.Width;
    SIZE.cy:= MainForm.Height;
    MainSize.CX:= 800;
    MainSize.CY:= 600;

    ImageStream:= LoadPicture(SIZE, ExpandConstant('{tmp}\{#Background}'));
    WinDC:= GetDC(MainForm.Handle);
    StretchImg(ImageStream, WinDC, 0, 0, SIZE.CX, SIZE.CY, 0, 0, MainSize.CX, MainSize.CY, SRCCOPY);

    ReleaseDC(MainForm.Handle, WinDC)
    ReleaseImg(ImageStream)
end;
[/more], загружающий jpeg-файл как фоновый рисунок. (спасибо Genri)
Но если перемещать окно мастера, то изображение стирается. Как это исправить?
Автор: Andylg
Дата сообщения: 19.04.2008 10:07
1)Подскажите, возможно ли каким либо образом заставить инсталер отображать pdf файлы в Информации при установке (вместо Readme.rtf)? Если pdf ставишь, то там кракозябры одни и не видно картинок. Просто нужно чтобы нестандартные шрифты или картинки в нем были.

2) Или какой будет скрипт для инсталяции шрифта в систему с помошью fontzip.exe, чтобы он инсталил шрифт в скрытом режиме перед показом Лицензионного соглашения?

Автор: 6apakyda
Дата сообщения: 19.04.2008 15:23
Токо у меня вопрос, мне надо установить вот так:
Папку (назовём её files) C:\программа\папка\files
Файл Х C:\программа\папка\
Файл Y С:\программа\
И сделать ярлык на рабочий стол файла из папки C:\программа\
и у ярлыка поставить определённые параметры для запуска!
Такое возможно? помогите плиз

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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