Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   [архив] Inno Setup .:[все вопросы]:. (http://forum.oszone.net/showthread.php?t=60604)

Mchik 17-03-2005 21:42 402566

[архив] Inno Setup .:[все вопросы]:.
 
Лимит страниц.
Тема закрыта.
продолжаем тут:

Inno Setup. Обсуждение установщика

Скрипты Inno Setup. Помощь и советы



Полезные ресурсы:
Официальный сайт| Inno Setup 5.2.3 RU
Русская справка |Зеракало 1| Зеракало 2
ISTool 5.30 |Русификатор
Русификатор ISTool |Зеркало 1|Зеркало 2
Inno Setup Script Generator |Зеркало 1
Unpaker 2.1 от 21.04.2009 - распаковывает инсталляторы, созданные с помощью Inno Setup, начиная с версии 2.0.18 по 5.2.4.
InnoUnpaker 2.6b3 [от valeron87]- можнет просмотривать содержание CompiledCode.bin
Unpaker 0.23 - расширенная китайская версия 2008-08-08 ( модификация)
Unpacker 0.24 | Зеркало 1 | Зеркало 2 - Inno Setup Unpacker (innounp plus) - расширенная версия распаковщика инсталляторов Inno Setup начиная с версии 2.0.8 по 5.3.0 Beta. Поддерживаются версии Unicode. Русифицирована. Последний релиз: 0.24 [23.05.2009]
Набор Restools
Restools - расширенная версия Inno Setup от китайских разработчиков, добавляет вашему инсталлятору новые возможности по оформлению, а также более удобный редактор скриптов (требуется наличие установленного Preprocessor'а).
Последние версии разработок от Restools:
InnoCompiler090319_English - в него входят файлы: Compil32.exe и Templates.dat;
Inno_ISCmplr_Setup090302 - в него входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32.
InnoCompiler090319_Russian - Русский перевод (80%) от tem000 - NEW !

QuickStart Pack - Inno Setup + Preprocessor (последняя версия ispack-5.2.4-dev)
"Всё в одном" от unikum111
читать дальше »

Цитата:

Цитата unikum111
В сборку входят следующие компоненты:
Inno Setup compiler 5.2.2 русская версия;
ISTool 5.2.1 русская версия;
Inno Script Generator английская версия;
Inno Setup Unpacker Explorer 1.0 аглийская версия;
Примечание: в Inno Setup Unpacker Explorer 1.0 заменён innounp.exe на тестовую версию 2.0, так что распаковывает инсталляторы вплоть до версии 5.2.2.
Есть возможность выбора компонентов.
Скачать: ifolder, RapidShare, iBox (Размер: 5.34 Mb).»




Полезные мелочи для Inno Setup:

- Converter v.0.1.2 - конвертор REG- файлов в формат скриптов Inno от Serega_ -новая версия
- Как убрать страницу приветствия (wpWelcome) в мастере установки приложения:
- Примеры скриптов на паскале
- Inno Setup Addon 0.07 For Total Commander
- Параметры командной строки инсталляторов InnoSetup:

Код:

/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталятора.
Выполнится только если DisableStartupPrompt секции [Setup] равна yes.

/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса.
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или
параметром '/SP-' командной строки).

Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка
проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим
установки очень ускоренный, система перезагрузится не спрашивая.

/LOG
Указывает инсталятору создать log-файл в папке TEMP для подробного отчета о действиях
и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании
ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был,
log-файл сообщит, что файл былдействительно пропущен и почему.

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не
перезаписываются и не дополняются).
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята
пользователем.

/LOG="filename"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный
путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет
заменен. Если файл не может быть создан, установка прервется и выдаст сообщение
об ошибке.

/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на
кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'.

/NORESTART
Указывает инсталятору не перезагружать компьютер даже если это необходимо.

/RESTARTEXITCODE=exit code
Задает инсталятору код, который он должен возвратить, если необходима перезагрузка.
Используется с '/NORESTART'.
См. также Коды выхода инсталятора. (кому интерестно, могу выложить или же доступно в хелпе)

/LOADINF="filename"
Указывает инсталятору загрузить параметры установки из указанного файла после проверки
командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF='command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/SAVEINF="filename"
Указывает инсталятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.

/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения.
Должен быть задан полный путь.

/GROUP="folder name"
Меняет имя папки на странице Выбор папки меню Пуск. Если директива
DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки
игнорируется.

/NOICONS
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице
Выбор папки меню Пуск.

/COMPONENTS="comma separated list of component names"
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки
указывает инсталятору менять тип установки на Выборочный.

/PASSWORD=password Задает пароль. Если не указана директива Password секции [Setup],
этот параметр игнорируется. Если введен неправильный пароль, параметр
также игнорируется.


Vadikan 18-03-2005 01:27 402567

Mchik
Спасибо, я сошлюсь на эту тему на странице Инсталляторы.

Mchik 18-03-2005 20:09 402568

Прочитал внимательнее этот список. Оказывается есть и еще полезные параметры. Привожу пример.
Я ставлю альтернативные кодеки Real & QuickTime. Они как раз запакованы с помощью Inno Setup. Но если их просто ставить в автоматическом тихом режиме, каждый из них припишет на винт Media Player Classic. Плейер, безусловно, отличный, но в количестве трех штук он мне на винте не нужен. :)
Решение состоит в использовании ключей /SAVEINF и /LOADINF.

1. Устанавливаем кодек с созданием файла ответов:
realalt.exe /saveinf="real.txt"
Отвечаем на все вопросы так, как нравится. Я, например, еще убрал создание группы в меню ПУСК.
2. ...и теперь его тихая установка выглядит как
START /WAIT realalt.exe /loadinf="real.txt" /silent

Petya V4sechkin 19-03-2005 09:27 402569

Mchik
Цитата:

Я ставлю альтернативные кодеки Real & QuickTime. Они как раз запакованы с помощью Inno Setup. Но если их просто ставить в автоматическом тихом режиме, каждый из них припишет на винт Media Player Classic. Плейер, безусловно, отличный, но в количестве трех штук он мне на винте не нужен.
Кстати, Real Alt и QuickTime Alt ставят MPC в одну и ту же директорию, так что здесь проблемы нет. (А если не поставить MPC с одним из этих кодеков, то ассоциации с файловыми расширениями могут не прописаться.)
А вот K-Lite ставит MPC в другую директорию.
В принципе, можно использовать K-Lite Mega Codec Pack (включает всё, в том числе Real Alt и QuickTime Alt), но он весит довольно много.
Сорри за оффтопик.

EgOrus 20-03-2005 20:02 402571

Mchik
кстати ключи не все, не хватает этих:
Цитата:

/LOG
/LOG="filename"
/PASSWORD=password

Solitude 09-05-2005 03:21 402572

А не подскажите как можно подредактировать инсталяционный файлик Inno Setup ??

Dust112 09-05-2005 08:04 402573

Существует плагин к Total Commander и Far для рапаковки инсталлятора на файлы и скрипт, поищи на сайте _http://innounp.sourceforge.net/

Solitude 09-05-2005 17:08 402574

Dust112
Видел я эти программи!! Они не распаковывают старые архивы!!!

Dirk Diggler 03-02-2006 11:59 402575

Блин, что-то у Inno Setup с путями! Пишу
Код:

XnView-win-full.exe /saveinf="save.inf"
, и файл ложится в %windir%\, пишу
Код:

XnView-win-full.exe /saveinf=".\save.inf"
, и файл ложится в %ProgramFiles%, кидаю его в один каталог с XnView-win-full.exe, запускаю
Код:

XnView-win-full.exe /loadinf=save.inf /silent    или
XnView-win-full.exe /loadinf=.\save.inf /silent    или
XnView-win-full.exe /loadinf="save.inf" /silent    или
XnView-win-full.exe /loadinf=".\save.inf" /silent

не видит файл в упор, пока полное имя с каталогом не укажешь.
Это Inno 4.0.8. А Inno 5.08 файл пишет в текущий каталог, а читать все равно не читает. Как побороть скотину?

Dirk Diggler 03-02-2006 12:09 402576

не, вру. Даже полный путь не спасает:
Код:

E:\burn\soft\xnview>XnView-win-full.exe /LOADINF="E:\burn\soft\xnview\save.inf"
/silent

И все равно ставится целиком, хотя у меня в save.inf всего пара компонентов указана

boss911 03-02-2006 18:08 402577

Dirk Diggler

Я делаю проще, вытаскиваю скрипт от интсталятора Inno Setup и редактирую его как мне надо (добовляю, удаляю компонеты, ярлыки, патчу файлы и т.д), а потом обратно компилирую дистрибутив! Если есть у тебя такая возможность, то это лучший вариант!!

Dirk Diggler 04-02-2006 02:06 402578

расскажи кратко или дай ссылку

boss911 04-02-2006 23:55 402615

Сам компилятор - Inno Setup + русификатор

Дополнительная программа к Inno Setup, для удобного редактирования скрипта, если надо - ISTool + русификатор

Утилита для распаковки дисрибутивов и для вытаскивания скрипта из инсталятора Inno Setup, работающая из командной строки или как плагин к FAR'у или к TC - innounp.exe
Так же, можно добавить следующие строки в реестр и в контекстном меню проводника появится меню (кликая правой кнопкой мыши по ексешнику) "innounp Extract":
Код:

Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\exefile\shell\innounp Extract\command]
@="cmd.exe /k innounp.exe -x \"%1\""

Утилиту, положить в %WINDIR%, потом распаковывается дистр., а рядом сним скрипт со всеми необходимыми путями по распаковке файлов, реестр, регистация файлов ну и т.д!

Dirk Diggler 05-02-2006 13:23 403423

скачал, попробовал. Из 4 дистров распаковался 1 - остальные "uncompatible version", да и этот распакованный какой-то странный - я скрипта для Inno Setup не нашел...

boss911 06-02-2006 00:21 403593

Dirk Diggler

Цитата:

Из 4 дистров распаковался 1 - остальные "uncompatible version"
Хм! Бывает, иногда попадаетса и не Inno Setup, а что-то похожое на него или дистр. упакован старой версией копилятора! Иногда сам путаю с NSIS!
Цитата:

да и этот распакованный какой-то странный - я скрипта для Inno Setup не нашел...
Если ты использовал для распаковки дистра через импортирования *.reg файла, что я дал выше, то все рапакуетса в ту же папку, где сам лежит дистр., а рядом ты увидиш скрипт для компиляции ("install_script.iss").

Dirk Diggler 06-02-2006 12:19 403700

Цитата:

иногда попадаетса и не Inno Setup,
Это точно Innо, "about..." говорит Inno версии соот-но такой-то.

Цитата:

через импортирования *.reg файла, что я дал выше, то все рапакуетса в ту же папку, где сам лежит дистр., а рядом ты увидиш скрипт для компиляции
неа.... распаковывал xnview, получил папку типа {sab}, и никакого скрипта.

boss911 06-02-2006 17:40 403799

Dirk Diggler

Цитата:

неа.... распаковывал xnview, получил папку типа {sab}, и никакого скрипта.
Про это я незнаю нечего!! Я тебе дал утилиту и как ей пользоватса тоже, распакуй утилитой и все у тебя получитса!!
Xnview, это же помойму просмотрощик и редактор графических файлов!!?

Dirk Diggler 06-02-2006 20:33 403859

точно. я ЕГО распаковал. Указанной тобой утилитой распаковал дистр с xnview.А щаз еще один распаковал - все равно, распаковывается в папку {app}, а скрипта нет.

boss911 06-02-2006 22:30 403886

Dirk Diggler

Что нет рядом с папкой "{app}" скрипта "install_script.iss"?
Ай блин я все понял! Эта утилита по той ссылке, что я тебе дал, оказываетса старая версия и если дистр. был упакован версией от 5.х и выше, то оно его не распакует! Ссылку на утилиту поправил!!

Aspirine 13-02-2006 11:57 406042

boss911
Слушай, объясни как правильно запоковывать обратно в Inno Setup.
А то я пробую, всё время ошибки выдаёт...
Версия Inno Setup 5.1.6

boss911 13-02-2006 17:34 406155

Aspirine
Цитата:

Слушай, объясни как правильно запоковывать обратно в Inno Setup.
Если получил скрипт, спомощью innounp.exe, то проблем не должно быть с компиляцией!!
Цитата:

А то я пробую, всё время ошибки выдаёт...
Версия Inno Setup 5.1.6
Какие ошибки, опиши поподробней!? Лучше русифицируй компилятор и пользуйся дополнительной утилитой ISTool (она идет с русским фейсом), так я думаю тебе будет понятней, что там у тебя выдает за ошибки!! Все ссылки выше!!

Aspirine 13-02-2006 18:21 406163

boss911
Благодарю, всё прошло на ура...
А ошибки, это я по неопытности всякие мелочи не замечал...
Русский фейс рулит!!!

superteacher 27-02-2006 07:50 411400

не работает ваш компилятор. все доп проги установил.

superteacher 27-02-2006 07:53 411401

файл russian.exe для Acdsee 70102rus. Не могу установить автоматически. Запрашивает пункт назначения. Russian.exe распаковал. Но не могу запаковать.

boss911 27-02-2006 20:27 411697

superteacher
Цитата:

не работает ваш компилятор. все доп проги установил.
Что именно у Вас не работает, отображайте плиз полную инофрмацию, если хотите, чтоб Вас правильно понимали!!
Цитата:

Russian.exe распаковал. Но не могу запаковать.
Чем он запакован и чем Вы его распаковываете, а потом чем пакуете!?

PENDEJO 02-03-2006 22:03 413081

Подскажите, плиз!!!
 
Не программист. Есть некая прога - в тупую копируются файлы на винт и всё. Устанавливается на двух одинаковых объектах. Разница в том, что файлы из папки Dir1 надо копировать на первый объект, а файлы из папки Dir2 надо копировать на второй объект. Все файлы лежат в общем инсталляторе. Как сделать так, чтобы галочкой выбрать наименование объекта (Объект 1 или Объект 2), и файлы скопировались в нужные директории. Спасибо

boss911 03-03-2006 23:20 413571

PENDEJO

Это можно сделать через компоненты, в скрипте надо прописать что-то подобное:
Код:

[Files]
Source: Dir1\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Dir1
Source: Dir2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Dir2
 
[Components]
Name: Dir1; Description: название 1
Name: Dir2; Description: название 2


PENDEJO 06-03-2006 08:27 414269

Boss911
Спасибо. Сейчас попробую

melato 31-03-2006 14:19 423592

2Vadikan

Почему-то не работает ссылка из статьи "Типы инсталляторов" о ключах Inno Setup...

Vadikan 31-03-2006 21:09 423727

melato
Цитата:

Почему-то не работает ссылка из статьи "Типы инсталляторов" о ключах Inno Setup...
Вы в правильной теме :)

melato 31-03-2006 21:45 423736


Цитата:

Цитата Vadikan
Вы в правильной теме

Сам этим заинтересовался (ключами), перешёл по ссылке, а там - "не указана тема". Как юзер, ничего не искал и написал туда, куда хоть как-нибудь подходит :)

boss911 10-05-2006 05:05 436122

Всем привет!! Столкнулся с проблемами!! Значетса имеютса такие значение в моем скрипте (*.iss):

Код:

[Run]
Filename: File.cmd; WorkingDir {app}; Flags: waituntilidle runhidden

1. как добитса того, чтоб инсталятор дожидался остановки батника, флаг waituntilidle непомогает, но почему-то при дэинсталяции
Код:

[UninstallRun]
Filename: File.cmd; WorkingDir: {app}; Flags: waituntilidle runhidden

инсталятор дожидаетса остановки батника, что за глюки!??

2. пожалуйста черкните, что надо добавить в скрипте, чтоб это значение реестра
Код:

[Registry]
Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Control\Session Manager; ValueType: multisz; ValueName: PendingFileRenameOperations; ValueData: \??\{localappdata}\File.dll{break}{break}

восстанавливалось, создавалось снова при дэинсталяции, очень сильно надо!??

3. и почему Inno Setup нехочет компилировать скрипт, если указаны некоторые системные файлы, которые распаковывуютса в системную директорию, например:
Код:

[Files]
Source: C:\MyFolder\shell32.dll; DestDir: {sys}

короче как это обойти!??

Сразу хочу сказать, что в коде паскаль не шарю обсолютно нечего, так что прошу, если сможете, помогите конкретными записями (кодами), что надо добaвить в мой скрипт!! Спасибо!!!

boss911 18-06-2006 16:46 452192

Решил выложить все ключи командной строки из русского хелпа, думаю может кому-то будет полезно:
Код:

/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталятора.
Выполнится только если DisableStartupPrompt секции [Setup] равна yes.

/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса.
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или
параметром '/SP-' командной строки).

Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка
проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим
установки очень ускоренный, система перезагрузится не спрашивая.

/LOG
Указывает инсталятору создать log-файл в папке TEMP для подробного отчета о действиях
и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании
ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был,
log-файл сообщит, что файл былдействительно пропущен и почему.

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не
перезаписываются и не дополняются).
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята
пользователем.

/LOG="filename"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный
путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет
заменен. Если файл не может быть создан, установка прервется и выдаст сообщение
об ошибке.

/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на
кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'.

/NORESTART
Указывает инсталятору не перезагружать компьютер даже если это необходимо.

/RESTARTEXITCODE=exit code
Задает инсталятору код, который он должен возвратить, если необходима перезагрузка.
Используется с '/NORESTART'.
См. также Коды выхода инсталятора. (кому интерестно, могу выложить или же доступно в хелпе)

/LOADINF="filename"
Указывает инсталятору загрузить параметры установки из указанного файла после проверки
командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF='command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/SAVEINF="filename"
Указывает инсталятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.

/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения.
Должен быть задан полный путь.

/GROUP="folder name"
Меняет имя папки на странице Выбор папки меню Пуск. Если директива
DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки
игнорируется.

/NOICONS
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице
Выбор папки меню Пуск.

/COMPONENTS="comma separated list of component names"
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки
указывает инсталятору менять тип установки на Выборочный.

/PASSWORD=password Задает пароль. Если не указана директива Password секции [Setup],
этот параметр игнорируется. Если введен неправильный пароль, параметр
также игнорируется.


pr-lp 17-07-2006 13:36 462114

НЕподскажите ли.. если Инно(4я версия) прописано -что он путь для инсталяции берет из реестра(тоесть когда дале-дале..нет вапроса с указанием вапроса о пути)..с какого ключа он считует путь или как можно принудительно включить чтоб он его запросил?

boss911 17-07-2006 18:38 462233

pr-lp
Цитата:

если Инно(4я версия) прописано -что он путь для инсталяции берет из реестра(тоесть когда дале-дале..нет вапроса с указанием вапроса о пути)..с какого ключа он считует путь
Нечего путного сказать немогу, так как не знаком с 4-ой версией и почему невыдает запроса пути установки, тут впервые с таким сталкиваюсь, наверно все же из-за 4-ой версии, попробуйте что-то поискать тут, но не уверен:
Код:

HKU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
Цитата:

... или как можно принудительно включить чтоб он его запросил?
Попробуйте запустите инсталятор с ключем /DIR=
Код:

Setup.exe /DIR="x:\dirname"
опять же неуверен в 4-ой вересии инсталятора, как он отриогирует на этот ключ!!

pr-lp 17-07-2006 21:00 462272

ну не запрашивает она потому что ..это как бы идет обновление фаила ..Инно в каком то ключе(интересно в каком обычно при таких действиях) считывает где программа стоит и прописываает путь инстоляции..
Не спрашивать путь не хочит если прописываю ДИр..идет Информация,вод серийника,ЗАпрос на ярлык..а вапроса о пути инстоляции нет((
Вот как выглядит окно информаци:
Информация о пользователе:
CARTER
SunBlock

Каталог установки(нету):


Папка в меню 'Пуск':
1C\Activision\D3

Дополнительные задачи:
Создать иконку на рабочем столе

boss911 17-07-2006 21:13 462280

pr-lp
Цитата:

Инно в каком то ключе(интересно в каком обычно при таких действиях) считывает где программа стоит и прописываает путь инстоляции
Немогу я найти где этот ключ, может из-за того, что 4-я версия, а может оно хранитса не в реестре, откуда такие данные!?
Код:

Setup.exe /DIR="x:\dirname"
- не спасает ситуацию!!?

ANDYru 18-07-2006 16:52 462532

а как нить можно раздел скрипта [Registry]
конвертнуть в нормальный файл реестра .reg

тобиш преоразовать
Root: HKU; Subkey: ".DEFAULT\Software\PCTools\Spyware Doctor\Settings"; ValueName: "StartupAction"; ValueType: Dword; ValueData: "$0"; Flags: createvalueifdoesntexist uninsdeletekey

в нормальное ?

boss911 18-07-2006 17:12 462544

ANDYru
Цитата:

тобиш преоразовать ... в нормальное ?
А чего же нельзя, тут можно воссоздать все самому из скрипта или же, после инсталяции экспортировать нужные ветки!!
Например из твоего приведенного, получитса это:
Код:

[HKEY_USERS\.DEFAULT\Software\PCTools\Spyware Doctor\Settings]
"StartupAction"=dword:00000000


ANDYru 18-07-2006 18:44 462589

boss911
пасиб . уже и сам догадался после инталла рорытся в реестре и собрать всё это в один рег файл ..
результат уже на руборде в соот ветке варезника :)

pr-lp 20-07-2006 18:16 463153

[IMG]D:\13.JPG[/IMG]
ну если так как на скрине..то все по прежнему((

А возможно 4ю версию распоковать..и к примеру если все запаковано не втолько в ехе но и в bin

boss911 20-07-2006 22:06 463233

pr-lp
Цитата:

А возможно 4ю версию распоковать..и к примеру если все запаковано не втолько в ехе но и в bin
Думаю можно, но опять же все упираетса в 4-ю версию инсталятора! Попробуй распакуй, как это сделать, найдеш в этой же теме в моем сообщении!!

pr-lp 20-07-2006 23:03 463250

сделал по другому..программой которая следит за реестром отследил куда Инно обращался.. спасибо..

boss911 21-07-2006 00:41 463275

pr-lp
Цитата:

... отследил куда Инно обращался.
Так поделись с другими плиз, может кому-то пригодитса!! :)

pr-lp 21-07-2006 20:18 463591

Regmon -имя её..
www.sysinternals.com

boss911 21-07-2006 23:31 463648

pr-lp
Цитата:

Regmon -имя её..
Да не название софта, которым ты отслеживал реестр, а саму ветку реестра, куда обращался Inno!!

pr-lp 22-07-2006 15:05 463827

аа..HKEY_LOCAL_MACHINE\SOFTWARE

YuriPet 22-07-2006 15:35 463837

Не подскажет кто, где взять для ISTool v5.1.6 файл istool-ru.lng ?

boss911 22-07-2006 17:55 463882

YuriPet
Цитата:

где взять для ISTool v5.1.6 файл istool-ru.lng
Есть для 5.1.5 , отлично подходит и все на русском!!

YuriPet 22-07-2006 18:09 463887

boss911
Огромное спасибо! :beer:

YuriPet 22-07-2006 19:07 463896

"Ничё не понимаю!" :shocked:
Почему у меня внутри создаваемых инсталляций в каталог embedded почти все файлы "упаковываются" в двойном экземпляре (например: вместо исходного License.txt получается License,1.txt и License,2.txt)?
Соответственно "правится" и install_script.iss.
В чем причина? Подскажите, кто знает, пожалуйста! :shuffle:

YuriPet 24-07-2006 13:13 464310

"И тишина-а-а..." :lazy:
Неужели никто с подобным явлением не сталкивался? ;)

boss911 24-07-2006 16:27 464376

YuriPet
Цитата:

еужели никто с подобным явлением не сталкивался?
Сколько использую Inno , но такой проблемы не встречал, странно!! Я правда License.txt не использую! В данном каталоге, что и грфичиские файлы тоже в двойном экземпляре идут и откуда такие данные, что они дублируютса!? Узнаеш при распаковки через innounp.exe , в кактологе {app} все нормально??

YuriPet 24-07-2006 17:30 464405

Ну хоть кто-то проснулся - спасибо! :beer:

Да, действительно - при распаковке командой innounp.exe -x test.exe или при просмотре через 7-Zip File Manager в кактологе {app} все нормально, а содержимое каталога embedded выглядит примерно так:
Код:

embedded\uninstall,2.exe
embedded\License.txt
embedded\InfoBefore.txt
embedded\CompiledCode.bin
embedded\WizardImage.bmp
embedded\WizardSmallImage.bmp

Но вот в при просмотре с использованием Total Commander и MultiArc (который тоже использует innounp.exe), почти все файлы (в т.ч. и графические) отображаются "в двойном экземпляре". :o
Код:

embedded\uninstall,2.exe
embedded\License,1.txt
embedded\License,2.txt
embedded\InfoBefore,1.txt
embedded\InfoBefore,2.txt
embedded\CompiledCode.bin
embedded\WizardImage,1.bmp
embedded\WizardImage,2.bmp
embedded\WizardSmallImage,1.bmp
embedded\WizardSmallImage,2.bmp

Смущает то, что если я просматриваю с использованием Total Commander "фирменные" инсталляционные файлы - там такого "дубляжа" нет! :dont-know

boss911 24-07-2006 21:40 464470

YuriPet

Я бы на твоем месте болше доверял бы innounp.exe -x test.exe
MultiArc я использую в FARе и там все нормально!! Я тут где-то оставлял домашнюю ссылку на innounp.exe , так вот к нему уже давненько имеетса GUI-интерфейс, скачай и посмотри через него!!

P.S. Я очень удевлен, что 7-Zip File Manager умеет просматривать инсталяхи Inno , а скрипт он умеет вытаскивать - наверно удобно, правда я не юзаю этот архиватор!!

YuriPet 25-07-2006 00:29 464516

boss911

Совсем у меня голова кругом пошла... :insane:

Во-первых - по поводу 7-Zip File Manager - это я поторопился (перепутал). :) Не умеет он работать с Inno-инсталляторами.
Во-вторых - просмотр с помощью ISUnp.exe (GUI-интерфейс к innounp.exe) тоже показал, что файлы в каталоге embedded "двоятся".
Так что - извини за то, что дал неверную информацию в предыдущем посте :shuffle:

И наконец:

1. Распаковываю с помощью ISUnp.exe какой-нибудь инсталлятор, например, тот-же IsUnp10setup.exe (размер - 691 092 байт.).

2. В полученном install_script.iss среди прочего вижу строки
Код:

[Files]
Source: "embedded\uninstall.exe"; DestDir: "embedded";
Source: "embedded\License.txt"; DestDir: "embedded";
Source: "embedded\WizardImage.bmp"; DestDir: "embedded";
Source: "embedded\WizardSmallImage.bmp"; DestDir: "embedded";

3. В полученную папку embedded
Код:

embedded\License.txt
embedded\WizardImage.bmp
embedded\WizardSmallImage.bmp

добавляю файл uninstall.exe (его нахожу в папке IsUnp с ранее установленной программой под именем unins000.exe, и просто переименовываю его перед добавлением).

4. Компилирую обратно с использованием Inno Setup Compiler 5.1.6 - получаю в папке Output файл setup.exe размером 930 744 байт.

5. Распаковываю его тем-же ISUnp.exe - в папке embedded файлы:
Код:

embedded\uninstall,2.exe
embedded\License,1.txt
embedded\License,2.txt
embedded\WizardImage,1.bmp
embedded\WizardImage,2.bmp
embedded\WizardSmallImage,1.bmp
embedded\WizardSmallImage,2.bmp

и в "новом" install_script.iss сами "прописались" строки
Код:

[Files]
Source: "embedded\uninstall,1.exe"; DestDir: "embedded"; DestName: "uninstall.exe";
Source: "embedded\uninstall,2.exe"; DestDir: "embedded"; DestName: "uninstall.exe";
Source: "embedded\License,1.txt"; DestDir: "embedded"; DestName: "License.txt";
Source: "embedded\WizardImage,1.bmp"; DestDir: "embedded"; DestName: "WizardImage.bmp";
Source: "embedded\WizardSmallImage,1.bmp"; DestDir: "embedded"; DestName: "WizardSmallImage.bmp";
Source: "embedded\License,2.txt"; DestDir: "embedded"; DestName: "License.txt";
Source: "embedded\WizardImage,2.bmp"; DestDir: "embedded"; DestName: "WizardImage.bmp";
Source: "embedded\WizardSmallImage,2.bmp"; DestDir: "embedded"; DestName: "WizardSmallImage.bmp";

Все бы "Черт с ним!" - неприятен факт возрастания размера! :smirk:

Возникает вопрос: "Что я делаю не так?"

boss911 25-07-2006 03:36 464530

YuriPet
Цитата:

3. В полученную папку embedded ... добавляю файл uninstall.exe
Не могу понять почему ты добавляеш свои файлы именно в embedded , если надо в {app} , да и инсталятор сам умеет создавать дэинсталятор, если выбранна данная опция!!
Кажись я догодался в чем дело, но пока это всего лишь догадки, а пока просто дам совет - забей на эти строки в скрипте, да и вообще, что указывает на embedded:
Код:

[Files]
Source: "embedded\License.txt"; DestDir: "embedded";
Source: "embedded\WizardImage.bmp"; DestDir: "embedded";
Source: "embedded\WizardSmallImage.bmp"; DestDir: "embedded";

просто удали их, а если ты хочеш, чтоб именно эти рессурсы (графические файлы по умолчанию скомпилируютса, так как они уже лежат в каталоге, куда установлен компилятор) отоброжались в твоем инсталяторе, то воспользуйся данной опцией:
Код:

[Setup]
LicenseFile=ПУТЬ\License.txt
WizardImageFile=ПУТЬ\WizModernImage.bmp
WizardSmallImageFile=ПУТЬ\WizModernSmallImage.bmp

И еще один маленький совет, чтоб небыло заморочек и вечного вопроса
Цитата:

"Что я делаю не так?"
- создавай свой скрипт с нуля, на основе вытащенного с какого-нибудь дистрибутива, то есть подглядывая, что же делает скрипт!! :)

YuriPet 25-07-2006 04:27 464533

boss911
Огромное спасибо - разобрался! :beer:

starwork 06-10-2006 10:25 494162

Всем привет !!!
У меня проблема такая......
При распаковке (установке), не создаются каталоги, все файлы ложаться в корневую папку.
Где я недоглядел и чего ещё не знаю ???
Спасибо !

EgOrus 06-10-2006 11:24 494193

starwork
приведи секцию [Files] своего скрипта, скорей всего не указал флаг Flags: recursesubdirs

starwork 06-10-2006 12:00 494227

2EgOrus
Source: "D:\Games\Titan Quest\TextureCompiler.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Titan Quest\Titan Quest.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Titan Quest\AdobeAcrobat\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Titan Quest\Audio\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

EgOrus 06-10-2006 12:12 494239

starwork
должно быть вот так
Код:

Source: "D:\Games\Titan Quest\TextureCompiler.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Titan Quest\Titan Quest.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Titan Quest\AdobeAcrobat\*"; DestDir: "{app}\AdobeAcrobat"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Titan Quest\Audio\*"; DestDir: "{app}\Audio"; Flags: ignoreversion recursesubdirs createallsubdirs

а еще лучше вот так
Код:

Source: "D:\Games\Titan Quest\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

starwork 06-10-2006 12:15 494242

Ага, последний скрипт это полностью на всю папку с игрой?
т.е. всего одна строка?

EgOrus 06-10-2006 12:20 494247

starwork
да, если есть ненужные файлы или папки можешь выкинуть их через флаг исключения
например
Код:

Source: "D:\Games\Titan Quest\*"; Excludes: example1.file, example2.file; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

starwork 06-10-2006 12:23 494249

Спасибо !!!
Ща попробую в двух вариантах, потом отпишусь )))

starwork 06-10-2006 12:35 494260

2EgOrus

А подскажи ещё.....
Что нужно ещё добавить, что бы после установки в диалоговом окне было меню "установить DirectX" ?

EgOrus 06-10-2006 12:42 494267

Код:

[Files]
Source: "Путь до directx\directx.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Run]
Filename: "{tmp}\directx.exe"; Description: "Установить DirectX?"; Flags: postinstall nowait skipifsilent checked


fox_cub 26-10-2006 19:21 503127

А у меня вт такая фича:при установке через модифицированный скрипт в Программах вместо группы с названием программы, Apollo например, появляется группа (Default). В чём может быть проблема?

EgOrus 26-10-2006 22:43 503190

fox_cub
скрипт покажи

Dust112 27-10-2006 14:45 503413

fox_cub
В Program Group запиши название своей группы в Default group name: и будет тебе счастье.

fox_cub 27-10-2006 15:34 503433

EgOrus
Код:

[Setup]
AppName=Apollo
AppVerName=Apollo 37zy
DefaultDirName={pf}\Apollo
OutputBaseFilename=Apollo37zy
Compression=lzma
LicenseFile=embedded\License.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\Apollo.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\HumanRights.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\RevisionHistory.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\ApolloCommands.h"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Apollo.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Apollo.eq"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\bass.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Plug-ins\MPEG_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\WAV_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\DSP_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\VIS_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\ApOGG.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\ApWMA.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\BASS_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\CDReader.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\inModplug.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\TTA_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\Plug-ins\WavPack_Apollo.dll"; DestDir: "{app}\Plug-ins"; Flags: ignoreversion
Source: "{app}\docs\AAP.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\content.css"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\DocIndex.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\DocTitle.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\EditingPlaylist.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\EqualizerDialog.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\index.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Introduction.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\KeyboardShortcuts.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\MainWindow.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\MiniWindow.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Appearance.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.General.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Internet.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Output.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Player.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Playlist.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\OptionsDialog.Strings.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Plug-insDialog.DSP.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Plug-insDialog.GeneralPurpose.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Plug-insDialog.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Plug-insDialog.Input.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Plug-insDialog.Visualization.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\RandomEntryPropertiesDialog.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\TrackPropertiesDialog.html"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{app}\docs\Welcome.html"; DestDir: "{app}\docs"; Flags: ignoreversion

[Registry]
Root: HKCU; Subkey: "Software\Capacala\Apollo"; Flags: uninsdeletekey

[Run]
Filename: "{app}\Apollo.exe"; Parameters: "/install";

[UninstallRun]
Filename: "{app}\Apollo.exe"; Parameters: "/uninstall";

[Icons]
Name: "{group}\Apollo"; Filename: "{app}\Apollo.exe";
Name: "{group}\Apollo documentation"; Filename: "{app}\docs\index.html";
Name: "{group}\Uninstall Apollo"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Apollo"; Filename: "{app}\Apollo.exe"; Tasks: "desktopicon";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Apollo"; Filename: "{app}\Apollo.exe"; Tasks: "quicklaunchicon";

[Tasks]
Name: "desktopicon"; Description: "Create a &Desktop icon"; GroupDescription: "Additional icons:";
Name: "quicklaunchicon"; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:";


EgOrus 27-10-2006 16:49 503465

fox_cub
у тебя используется переменная {group}, ты её неопределил добавь в [Setup]
DefaultGroupName=Apollo

EgOrus 12-11-2006 21:30 510619

2ALL
Может кто-то желает помочь в написании статьи по InnoSetup ? прошу сюда

Black Babay 16-11-2006 15:02 512688

EgOrus
Прошу извинить за дубль, но здесь актуальнее.
Думаю, что имеет смысл создать тему по конструкторам InnoSetup. Было бы очень полезно иметь возможность централизовано собрать скрипты и сборки.

EgOrus 16-11-2006 21:55 512924

Black Babay
спасибо за учатие
поясни свою мысль, что то я не совсем представляю как централизовано собирать скрипты и сборки

Помощи прошу потомучто очень занят, содержание как бы намечено, а вот со временем выходит полный облом, статья в дальнейшем скорей всего пойдет в офлайн учебник unnatend.oszone.net, если конечно Vadikan не забракует :-)
А на будущее запланирована еще и статья по NSIS.

Black Babay 16-11-2006 22:10 512936

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

EgOrus 16-11-2006 23:06 512957

не уверен что это намного лучше выложенного просто скрипта, в скрипте можно просто делать описание где какие папки должны лежать, в принципе Source: и DestDir: это самые основы при работе с Inno скриптами, думаю проблемм с расположением не возникнет, сами же "сырцы" программ качать бессмысленно, т.к. они имеют свойства обновляться...
Продложая твою мысль может имеет смысл выкладыть вместе со скриптом голую структуру папкок без файлов, которую уже каждый будет наполнять для себя сам.

Black Babay 16-11-2006 23:24 512967

Цитата:

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

molvi 30-11-2006 17:31 519016

Есть урезанный Nero 7570 (размер 15,4 Мб), упакованный Inno Setup. Опции /Verysilent /SP- делают установку тихой. Подскажите пожалуста, как теперь подставить серийник и снять галочки с азиатских языков.

boss911 30-11-2006 20:10 519077

molvi

За галочки отвечают ключи /COMPONENTS= и /TASKS , но надо знать внутренние имя этих значений, которые надо подставить, а серийник, наверно через reg файл только, тут надо смотреть сам инсталятор!!

Предлагаю подправить шапку, вот отсюда можно взять, более лучшие описанные, команды для тихой установки!!

pr-lp 04-12-2006 16:53 520750

Может кто подскажет,накопилось ряд вапросов (какие параметры задавать в скрипте):
1).Что нужно указать чтоб к примеру при сжатие инно пропускал некоторые фаилы,папки и не сжиал их,а оставлял в оригинальном размере
2).Где надо указать и какой параметр чтоб фаилы запакованые извлекались не в паку каторый инно сам себе создаст а в уже созданную папку ,вот пример :
[Setup]
AppName=Splinter Cell Double Agent
AppVerName=Splinter Cell Double Agent
AppPublisher=Carter_2006,Inc.
DefaultDirName={pf}\Splinter Cell Double Agent
DefaultGroupName=Splinter Cell Double Agent
OutputBaseFilename=Setup
UninstallStyle=classic
Compression=lzma/ultra
DiskSpanning= yes
DiskSliceSize=733989400
SlicesPerDisk=3
VersionInfoCompany=carter
VersionInfoDescription=Splinter Cell Double Agent
VersionInfoVersion=2.0

[Tasks]
; NOTE: The following entry contains English phrases ("Create a desktop icon" and "Additional icons"). You are free to translate them into another language if required.
Name: "desktopicon"; Description: "Создание иконки на Рабочем Столе"; GroupDescription: "Создание иконки:"; Flags: checkedonce

[Files]
Source: "F:\GAMES\Splinter Cell Double Agent\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files


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

4) . если ехе находится не сразу в
карне, а в папке \System ..у меня в
свойствах
ярлыка пути получается к примеру,
"F:\GAMES\Splinter Cell Double Agent\System\SplinterCell4.exe" -ll

а Расположение "F:\GAMES\Splinter Cell Double Agent" ,а надо
"F:\GAMES\Splinter Cell Double Agent\System\" а вот как это прописать я не
пойму (((

boss911 04-12-2006 21:19 520831

pr-lp

1. Flags: nocompression

2. Честно говоря, нечего не понял, может плохо вникнул в вопрос, сори!!

3. Тут лучше упаковать группу файлов в SFX архив и запустить этот архив с необходимым ключами или, можно использовать флаг hidewizard, который скроет окно распаковки файлов, например (SFX 7z):

Код:

[Files]
Source: "C:\SFX.exe"; DestDir: "{app}"; Flags: deleteafterinstall nocompression

[Run]
Filename: "{app}\SFX.exe"; Parameters: "-y"; Flags: waituntilterminated hidewizard

Распаковка SFX архива, произойдет только после извлечения всех файлов из инсталятора Inno!!

4.
Код:

[Icons]
Name: {userdesktop}\Название ярлыка; Filename: {app}\System\SplinterCell4.exe; WorkingDir: {app}\System; Parameters: -ll


pr-lp 06-12-2006 02:52 521384

2. Я уже имею ранее установленную програму,с тем что я описал скрипт, получается что указываеш путь к той папке где уже что то стоит(ранее установленная программа) ,вместо того чтоб файлам извлечься в корень ,создается папка с именем программы и в неё уже извлекаются файлы ,а мне надо чтоб файлы извлекались в корень папки... а в примере скрипта

[Setup]
AppName=ШтырлиЦ-Любимый бюст Гитлера
AppVerName=ШтырлиЦ-Любимый бюст Гитлера
AppPublisher=Carter_2006, Inc.
DefaultDirName={pf}\ШтырлиЦ
DefaultGroupName=ШтырлиЦ-Любимый бюст Гитлера
UninstallDisplayIcon={app}\STRLIZ.exe
OutputBaseFilename=Setup
UninstallStyle=classic
Compression=lzma/ultra
ShowComponentSizes=yes
ShowTasksTreeLines=yes


[Tasks]
; NOTE: The following entry contains English phrases ("Create a desktop icon" and "Additional icons"). You are free to translate them into another language if required.
Name: "desktopicon"; Description: "Создание иконки на Рабочем Столе"; GroupDescription: "Создание иконки:"; Flags: checkedonce

[Files]
Source: "D:\Games\Stirliz\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files


[Icons]
Name: "{group}\ШтырлиЦ-Любимый бюст Гитлера"; Filename: "{app}\STRLIZ.exe"; WorkingDir: "{app}"; IconFilename: "{app}\Icon.ico"
Name: "{group}\Удолить "; Filename: "{uninstallexe}"
Name: "{userdesktop}\ШтырлиЦ-Любимый бюст Гитлера"; Filename: "{app}\STRLIZ.exe";WorkingDir: "{app}" ;Tasks: desktopicon ; IconFilename: "{app}\Icon.ico"


получается что я указываю папку ранее уже созданую примеру D:\Games\Stirliz5\ ..идет извлечение ..получается в папке Stirliz5 папка ШтырлиЦ и в ней уже фаилы ,а надо чтоб afsks извлекались в корень \Games\Stirliz5 ..мне кажется что то надо дописать в секции [Setup] или вообще что не писать чтоб фаилы запакованые в инно извлекались не в каталог задуманный а в корень ... если просто оставить DefaultDirName={pf}\ тогда создается Новая папка ...ну вот в краации что я для себя не уяснил

DenchikK 12-12-2006 08:05 523701

Хочу научится более или менее нормально писать скрипты на InnoSetup. Прочитал множество материлов, форумов по этому вопросу, узнал много нового и нужного, что смог воплотить в жизнь, но одна идея, которая у меня появилась, всё никак не может воплотиться в жизнь. Самому просто очень интересно!Надеюсь на Вашу помощь.

Идея заключается вот в чем:

Надо поставить смайлики для программы QIP в папку, определяемую текущим скином, с сохранением старого набора.

Для тех кто не в теме:
В Qip смайлики находятся по следующему пути:
c:\Program Files\QIP\Skins\
дальше - анимированные смайлики (файлы gif и ini) находятся в подпапке скина, например по умолчанию смайлики находятся по этому пути:
c:\Program Files\QIP\Skins\ICQ5\Smilies\Animated\
если я например использую скин Batterfly, то смайлики соответственно будут тут:
c:\Program Files\QIP\Skins\Batterfly\Smilies\Animated\

Файл, в котором записано, какой скин сейчас используется, находится тут:
c:\Program Files\QIP\Skins\current.cfg

В нем первая строчка название скина, которое равно названию каталога.

То бишь основная проблема сводится к тому - как извлечь из файла current.cfg название скина и подставить его в путь для установки смайликов.

Сохранение текущих смайликов средствами скрипта, я так и не понял, как осуществить, хотя что то подобное встретил в "Руководстве по Inno Setup 5, версия 4". Я подошел более тупо - через скрипт AutoIT, при первом его запуске происходит переименование каталога со смайликами, при uninstall - запускается ещё раз и переименовывается обратно :
Код:

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

If FileExists("Animated") Then
DirMove ( "Animated", "Animated_1" )
else
If FileExists("Animated_1") Then
DirMove ( "Animated_1", "Animated" )
EndIf
EndIf
Exit

а вот сам скрипт (вернее рабочий черновик), без определения текущего скина, ставящий смайлики в каталог по умолчанию:
[code]
[Setup]
AppName=Смайлики
AppVerName=Смайлики Для QIP
DefaultDirName={pf}\QIP\Skins\ICQ5\Smilies\Animated\
DefaultGroupName=Смайлики Для QIP
AllowNoIcons=yes
OutputBaseFilename=setup
SetupIconFile=C:\Program Files\QIP\qip.ico
Compression=lzma
SolidCompression=yes
FlatComponentsList=no
UsePreviousAppDir=no
UsePreviousGroup=no
UsePreviousSetupType=no
UsePreviousTasks=no
AlwaysShowDirOnReadyPage=yes
DirExistsWarning=no
InfoBeforeFile=C:\123\MyInfoBefore.txt
UninstallFilesDir="{pf}"

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

[LangOptions]
;Параметры для русского языка
rus.LanguageName=<0420><0443><0441><0441><043A><0438><0439>
rus.LanguageID=$0419
rus.LanguageCodePage=1251
rus.DialogFontName= MS Shell Dlg
rus.DialogFontSize=8
rus.WelcomeFontName=Verdana
rus.WelcomeFontSize=12
rus.TitleFontName=Arial
rus.TitleFontSize=29
rus.CopyrightFontName=Arial
rus.CopyrightFontSize=8

[Types]
Name: "first"; Description: "Смайлики для Qip";

Код:

var
  ResultCode: Integer;
  s1, s2:string;
Procedure MyBeforeInstall;
Begin
//  s1:=ExpandConstant('{pf}')+'\QIP\Skins\ICQ5\Smilies\';
//  s2:=ExpandConstant('c:\123\DirRen.exe');
//  FileCopy(s2, s1+'\DirRen.exe', True);
//  Sleep(1000);
  Exec(ExpandConstant('{pf}\QIP\Skins\ICQ5\Smilies\DirRen.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
  Sleep(1000);
end;

//[InstallDelete]
//Type: files; Name: "{app}\*.gif"
//Type: files; Name: "{app}\_define.ini"

[Files]
Source: "C:\123\DirRen.exe"; DestDir: "{pf}\QIP\Skins\ICQ5\Smilies\"; Flags: ignoreversion;
Source: "C:\123\Animated1\*.ini"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall; Flags: ignoreversion;
Source: "C:\123\Animated1\*.gif"; DestDir: "{app}"; Flags: ignoreversion;

[Icons]
Name: "{group}\{cm:UninstallProgram,Смайлики для Qip}"; Filename: "{uninstallexe}"

[UninstallRun]
FileName: "{pf}\QIP\Skins\ICQ5\Smilies\DirRen.exe"; Flags: nowait

[UninstallDelete]
Type: files; Name: "{app}\*.gif"
Type: files; Name: "{app}\_define.ini"

Заранее благодарен за помощь!

EgOrus 12-12-2006 19:38 523938

DenchikK
сильно в задачу и скрипт не вникал
если без всяких выкрутасов, попростому, то извлечь можно вот так:
Код:

var
  cfgfile: TArrayOfString;
  skin: String;
begin
  LoadStringsFromFile('C:\Program Files\QIP\Skins\current.cfg', cfgfile);
  // пеерменная skin и есть название твоего скина используй её при указании путей
  skin := cfgfile[0];
  // для отладки выводит значение переменной skin
  MsgBox( skin, mbInformation, MB_OK );
end;


DenchikK 13-12-2006 07:34 524131

EgOrus
Спасибо большое за ответ, но я пока не понимаю, как потом это
склеить - получается как бы три части:

1. C:\Program Files\QIP\Skins\
2. Название полученного скина
3. \Smilies\Animated\

и как потом это полученное подставить в
[Setup]
DefaultDirName={pf}\QIP\Skins\ICQ5\Smilies\Animated\

Еще раз извините за беспокойство!

EgOrus 13-12-2006 08:52 524152

Пример почти из справки
[code][Setup]
DefaultDirName={pf}\QIP\Skins\{code:GetSkinName}\Smilies\Animated\

Код:

function GetSkinName(Param: String): String;
var
  cfgfile: TArrayOfString;
  skin: String;
begin
  LoadStringsFromFile(ExpandConstant('{pf}')+'QIP\Skins\current.cfg', cfgfile);
  // пеерменная skin и есть название твоего скина используй её при указании путей
  skin := cfgfile[0];
  result := skin;
  // для отладки выводит значение переменной skin
  MsgBox( skin, mbInformation, MB_OK );
end;

Перечитал задачу, и что-то не могу понять чем тебе поможет данный скрипт, я так понял тебе название текущего скина нужно для бэкапа существующего?
Если так то нужно вычитывать название из конфига, затем бэкапить средствами паскаля этот каталог (ремувить в папку с именем название.bak предположим) и всё.
При ините деиснтоляции (procedure DeinitializeUninstall();) удалять новый скрипт и восстанавливать опять же переименованием первоначальный скин.

DenchikK 14-12-2006 01:19 524439

Там не только бекап - туда же и новые смайлы запихиваются. Для каждого скина - свой набор смайлов.
Спасибо - попробую разобраться!

P.S.
На строчке
result := skin;
выдается ошибка Out Of Range

поправил строчку
LoadStringsFromFile(ExpandConstant('{pf}')+'\QIP\Skins\current.cfg', cfgfile);
заработало

Спасибо Вам огромное!!!

ALWagner 10-01-2007 18:33 534385

2 ALL

Есть старая программа запакованная Inno Setup v. 1.3.25. С 2001 г. не обновлялась. Есть желание сделать тихую инсталяшку. Ключи: /SILENT, /VERYSILENT, /SP- не проходят.
Innounp не распаковывает.

Кто поможет?

ZaV 11-01-2007 08:06 534626

а что за программа то поподробнее если можно ...

ALWagner 11-01-2007 12:21 534745

ZaV

Path2Clipboard v1.0.7 for Win95/Win98/WinNT4/Win2000 - маленькая бесплатная программка, которая дает Вам возможность
быстро и удобно копировать путь к файлу(ам)/папке(ам) в Буфер Обмена.

Автор: Валерий Доможиров (d_valery@mail.ru) офсайт - http://www.myfreeware.narod.ru/produ...2Clipboard.htm

Пользуюсь давно, и хотя установить ее не составляет труда хочу попробовать сделать тихую инсталяшку.

jameszero 11-01-2007 14:52 534801

ALWagner
У меня эту программу распаковал Total Commander с Multiаrc плагином.
Вот, то что получилось http://ifolder.ru/840107
Только там нет привычного iss файла, но при желании можно написать с нуля, он элементарный.

ZaV 12-01-2007 10:06 535115

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

ALWagner 12-01-2007 19:35 535203

jameszero ZaV

Thanks

Black Babay 18-01-2007 14:30 537893

Цитата:

запаковал по быстрому может где что поправить надо поэтому выкладываю и скрипт и setup ...
Немного подправил: setup

Код:

[Setup]
AppName=Path2Clipboard
AppVerName=Path2Clipboard 1.0.7.67
DefaultDirName={pf}\Path2Clipboard
OutputBaseFilename=Path2Clipboard-1.0.7.67
Compression=lzma
SolidCompression=yes
VersionInfoVersion=1.0.7.67
DisableFinishedPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
AllowNoIcons=yes

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

[Messages]
BeveledLabel=—— Compiled by 3B Group

[Files]
Source: "{app}\ReadMe_Rus.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Path2Clipboard.dll"; DestDir: "{app}"; Flags: regserver uninsrestartdelete
Source: "{app}\ReadMe_Eng.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{sys}\Path2ClipboardSetup.cpl"; DestDir: "{sys}"; Flags:

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Classes\*\shellex\ContextMenuHandlers\Path2Clipboard"; ValueType: String; ValueData: "{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}";
Root: HKLM; Subkey: "SOFTWARE\Classes\CLSID\{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}"; ValueType: String; ValueData: "Copy Path to Clipboard";
Root: HKLM; Subkey: "SOFTWARE\Classes\CLSID\{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}\InprocServer32"; ValueType: String; ValueData: "{app}\Path2Clipboard.dll";
Root: HKLM; Subkey: "SOFTWARE\Classes\CLSID\{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}\InprocServer32"; ValueName: "ThreadingModel"; ValueType: String; ValueData: "Apartment";
Root: HKLM; Subkey: "SOFTWARE\Classes\Directory\shellex\ContextMenuHandlers\Path2Clipboard"; ValueType: String; ValueData: "{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}";
Root: HKLM; Subkey: "SOFTWARE\Classes\Drive\shellex\ContextMenuHandlers\Path2Clipboard"; ValueType: String; ValueData: "{{8e3e0f0a-0fcc-11ce-bcb0-b3fd0e25381f}";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard"; ValueName: "Cascade"; ValueType: String; ValueData: "True";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard"; ValueName: "Icon"; ValueType: String; ValueData: "True";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "Long"; ValueType: String; ValueData: "Длинные пути всех выбранных";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "Main"; ValueType: String; ValueData: "Копировать путь";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "Name"; ValueType: String; ValueData: "Имена всех выбранных";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "Share"; ValueType: String; ValueData: "Длинные пути всех выбранных через Share";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "Short"; ValueType: String; ValueData: "Короткие пути всех выбранных";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "UNC"; ValueType: String; ValueData: "UNC-пути всех выбранных";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "URL"; ValueType: String; ValueData: "Длинные пути всех выбранных в URL-формате";
Root: HKCU; Subkey: "Software\VD\Path2Clipboard\Rus"; ValueName: "woExt"; ValueType: String; ValueData: "Имена всех выбранных без расширения";


jameszero 18-01-2007 15:52 537936

Black Babay
За что ж вы так безжалостно копирайт автора удалили?
Перепаковать себе и в паблик выкладывать это, как говорят в Одессе - две большие разницы ;)

Vlad09 21-01-2007 05:31 539202

А почему бы не пользоваться последней версией программы? Кажется 5,1,9, я этой программой несколько хороших программ перепаковал - jv16 PowerTools 2006 1.52.350, Apollo 37zz, Easy CD-DA Extractor 10, Flash Get1.81Final. Довольно неплохо получается, а со старыми версиями больше мороки. Кстати, перепакованные программы можно взять с моего сайтика (если он жив еще), вот ссылка на него:
http://vlad09.mylivepage.ru/file

EgOrus 21-01-2007 11:12 539241

Vlad09
Цитата:

а со старыми версиями больше мороки
интересно ты чэнджлог версий читаешь? поясни чем например версия 5.0.1 замороченее 5.1.9. По логике вещей наоборот с каждой новой версией появл. больше возможность и общая сложность программы возрастает, принципиально же нового в создании скриптов ничего не появилось.

Grantsfer 09-02-2007 17:47 547871

Здравствуйте!Подскажите плиз, а есть какие-нить ключи для установки ярлыков в меню Пуск и в панель быстрого запуска(именно для инсталяторов InnoSetup)?

boss911 09-02-2007 20:16 547907

Grantsfer
Код:

/NOICONS
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице
Выбор папки меню Пуск.

Подробно о ключах для InnoSetup, можно узнать сдесь, на русском!

Grantsfer 10-02-2007 10:24 548055

boss911
Эт я уже читал, тока меня интересовали ключи установки ярлыков, а не их отмена. :)

boss911 11-02-2007 01:39 548349

Grantsfer
Цитата:

Эт я уже читал
Ну так, что Вы хотите, это с официального хелпа к программе, думаю, что стандартных методов нет! :)

Grantsfer 12-02-2007 18:19 549004

Ок! Спасибо!

strelok-ac 25-05-2007 01:27 590673

Это конечно хорошо пересобрать инсталятор. Но проблема в том, что инсталятор от K-Lite Codec Pack стоит на пароле, и распаковать его невозможно. А вот и суть проблемы: создал файлик коммандой /Saveinf. Там записано: Dir=C:\Program Files\K-Lite Codec Pack. Нельзя ли там что-нибудь написать чтобы место ProgramFiles он смотрел в реестре. Например если системный раздел D: , возникает проблема. Если кто знает, Прошу помочь!

boss911 25-05-2007 03:37 590688

strelok-ac
Цитата:

Но проблема в том, что инсталятор от K-Lite Codec Pack стоит на пароле, и распаковать его невозможно.
Ну не все так плохо, например! :)
Цитата:

Там записано: Dir=C:\Program Files\K-Lite Codec Pack.
Путь можно указать через командную строку инсталлятора -
Код:

/DIR="x:\dirname"
Так же, посмотрите [addon] K-Lite Mega Codec Pack, может, еще, что-то узнаете для себя полезного!

jameszero 25-05-2007 12:24 590822

strelok-ac
Если проблема в том, чтобы сделать универсальную установку K-Lite, не приязанную у букве диска, то здесь я расписал метод (дистрибутив подготавливается к установке с помощью параметра -makeunattended)

conductor 26-08-2007 21:33 633381

http://sabbathblacklab.narod.ru/i.html
Inno Setup от Kindly
может кому интересно
У кого есть видео пример или инструкция с скриншотами
какой нибуть проги для начинающего хакера-ламера?
Пришлите плиз

di2blo 14-10-2007 22:45 660538

Привет всем помогите с программой Net SPEAKERPHONE(http://clx-soft.com/netsph/distr/netsph_setup.exe) как сделать её чтобы устанавливалась автоматом?если не сложно сделайте плиз или обьясните поподробнее

boss911 14-10-2007 23:46 660571

di2blo

Читаем ->
Код:

/SILENT, /VERYSILENT 
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса.
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или
параметром '/SP-' командной строки).

Код:

netsph_setup.exe /VERYSILENT

AlexALSP 08-12-2007 07:26 693142

А скажите чем сейчас можно распаковать новую версию программы. А то утилита предложенная здесь ее не поддерживает пока.

Spirkaa 08-12-2007 11:34 693198

AlexALSP, innounp 0.20 . http://www.msilab.net/rus.4447

AlexALSP 08-12-2007 11:54 693208

Spirkaa,

Спасибою Забрал.

snark 25-12-2007 10:08 703398

Spirkaa, перезалейте пожалуйста
уже не надо. все нашел

ChVL 26-12-2007 16:27 704469

В скрипте прописываю запуск приложения из PF. При инсталляции зависает окно с прогрессом установки (оно при этом неактивное) и процесс убивается только через диспетчер задач. Можно другим способом: закрыть приложение, тогда инсталляция проходит до конца. Другими словами, приложение уже запустилось, а процесс инсталляции не закончился и завис.
Пробовал Inno 5.1.10 и 5.2.2 - одинаково. От приложения не зависит - такой баг у всех.
Это каким-то образом лечится?

ZaV 26-12-2007 16:58 704485

ChVL,не очень понял про что ты написал
может пример скрипта выложишь или поподробнее расскажешь что за приложение ?

ChVL 27-12-2007 08:33 704821

ZaV,
В аттаче простейший проект, на самом деле пригодный для начального обучения. Тем не менее это рабочая (между прочим, полезная) утилита. В проекте оставил и свой экзешник на тот случай, если у Вас компиляция пройдёт по-другому.
Проблема следующая. При запуске без ключей а также с ключами /SILENT и /VERYSILENT зависает инсталляция, при этом прога оказывается запущенной. Если [Run] убрать - всё работает без проблем. Аналогичная ситуация и с другими приложениями.

snark 27-12-2007 10:57 704915

ChVL
насколько я понял, необходимо поставить втихую программу, потом ее запустить?
попробуй это
Код:

[Run]
Filename: {app}\ClipTray.exe; Flags: waituntilidle runminimized postinstall

запусткает исполнение ClipTray.exe после установки (postinstall) в минимизированном окне.
при желании можно потом пришибить этот процесс командой:
Код:

[Run]
Filename: taskkill.exe; Parameters: /F /IM ClipTray.exe; Flags: postinstall runminimized

у меня поставилось без проблем

ChVL 27-12-2007 12:59 704984

snark
Спасибо!! Всё работает как надо.

Следующая проблема. Как заставить сразу загружать интерфейс Ru вместо дефолтного En?
В аттаче проект, в котором я поступил грубо: запретил переписывать модуль En, при этом инсталлятору ничего не остаётся делать, как загружать Ru. Однако такое надругательство позволяют далеко не все программы, и уж совсем неприлично лишать юзеров возможности переключиться на интерфейс En. Подозреваю, что существует грамотное и универсальное решение.

Уп-с... Превышаю квоту, не грузит файл.
Можно загрузить отсюда .

snark 27-12-2007 14:55 705045

ChVL
чтоб загрузить сразу русский интерфейс вместо английского, нужно:
1. поставить прогу
2. выбрать нужный язык
3. залезть в "%userprofile%\Local Settings\Application Data\Martau\Total Uninstall 3\" и найти там файл user.dat/ Это и есть файл настроек.
4. Остается только добавить его в папку {localappdata} проекта и дописать строку
Код:

Source: {localappdata}\user.dat; DestDir: {localappdata}\Martau\Total Uninstall 3
Еще было б неплохо добавить имя группы в меню пуск
Код:

[Setup]
DefaultGroupName=Total Uninstall 3


ChVL 28-12-2007 08:28 705436

Спасибо! За решение проблемы и подсказку.
Из предложенного решения можно сделать вывод, что скрипт не заведует какими-то индивидуальными настройками, в частности, выбором интефейса при загрузке. Однако сколько программ (точнее, программеров) - столько и вариантов их структур. Это означает, что каждый раз придётся проявлять интуицию при поиске решения (или спрашивать грамотных людей...).

snark 28-12-2007 09:03 705453

ChVL
интуиция + RegShot + FileMon = 95 % настроенная как надо программа :)
Еще предложение: если не надо кидать ярлык на рабочий стол, можно не комментировать строку
Код:

[Icons]
;Name: "{userdesktop}\Total Uninstall 3"; Filename: "{app}\Tu.exe"; Tasks: "desktopicon";

а вписать
Код:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: Additional icons:; Flags: unchecked

это принудительно снимает галку "Установить ярлык на рабочий стол"

ChVL 28-12-2007 10:49 705524

snark,
А если найти аналог Regshot'у, который бы выдавал результат сравнения в виде готового reg-файла - совсем был бы кайф...

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

boss911 28-12-2007 18:28 705813

Цитата:

Цитата ChVL
А если найти аналог Regshot'у, который бы выдавал результат сравнения в виде готового reg-файла - совсем был бы кайф... »

Зачем аналог! RegShot умеет сохранять снимок в виде готового reg файла, это реализовано только в версии 1.7.2.2.

ChVL 28-12-2007 20:35 705875

boss911,
Спасибо за сногсшибательную новость! - Давно мечтал...

snark 29-12-2007 08:27 706051

ChVL
а вот RegShot 1.8.2

ChVL 29-12-2007 11:21 706112

snark,
Спасибо, конечно. Обязательно проверю обе версии. Только вот по Вашей ссылке скачать не получилось - не смог разобраться с дурацкой системой webfile'a. Гоняет по кругу, а закачки нет. И номер вставлял куда-то там, и напрямую пытался...

snark 29-12-2007 11:25 706114

Вложений: 1
ChVL, вот тут

ChVL 29-12-2007 12:25 706141

snark,
Спасибо!
Подробно не разбирался, но это явно разные RegShot'ы.
1.8.2 - от производителя, объём распакованной папки около 86 КБ.
1.7.2.2 - сборка boss911, объём экзешника около 411 КБ.
Будем пробовать.

МИШАНЧИК 07-01-2008 05:30 710821

Подскажите пожалуйста как сделать, чтоб в инсталяторе собраном в Inno Setup для ярлыка деинсталятора можно было назначать какую либо иконку, но не такую как иконка самого инсталятора? То есть чтоб установка и удаление 2 разные иконки.
Заранее спасибо.

boss911 07-01-2008 22:39 711425

Цитата:

Цитата МИШАНЧИК
чтоб в инсталяторе собраном в Inno Setup для ярлыка деинсталятора можно было назначать какую либо иконку »

Стандартными средствами Inno нельзя, а о не о стандартных решениях, я не слышал. Можно взять заранее подготовленный деинсталлятор (unins000.exe и unins000.dat), пропатчить его другой иконкой и скомпилировать с основным дистрибутивом. Только не забываем в скрипте отключить создание деинсталлятора:
Код:

[Setup]
Uninstallable=false

Добавлено:
Извиняюсь, возможно, я изначально не правильно понял вас: вам нужно изменить иконку самого деинсталлятора (unins000.exe) или иконку ярлыка на запуск деинсталлятора?

МИШАНЧИК 08-01-2008 05:00 711558

boss911, как изменить иконку ярлыка деинсталятора, чтобы в Пуск-Прграммы и в Удалении программ иконка деинсталятора отличалась бы от иконки инсталятора(если иконку инсталятора назначаешь сам)?

boss911 08-01-2008 19:16 711938

Цитата:

Цитата МИШАНЧИК
как изменить иконку ярлыка деинсталятора, чтобы в Пуск-Прграммы ... иконка деинсталятора отличалась бы от иконки инсталятора »

Код:

[Icons]
Name: {group}\{cm:UninstallProgram,}; Filename: {uninstallexe}; IconFilename: {sys}\SHELL32.dll; IconIndex: 31

IconIndex - последовательный номер индекса иконки в ресурсе, отсчет начинается с "0" (31 - пустая корзина).

Цитата:

Цитата МИШАНЧИК
в Удалении программ иконка деинсталятора отличалась бы от иконки инсталятора »

Пост #134.

ZaV 09-01-2008 10:44 712285

У меня по моему сделано вот так

добавляем В Секции следующие строчки

Код:

[Setup]
SetupIconFile=compiler:dm.ico
UninstallDisplayIcon={app}\dmaster.exe

compiler:dm.ico
в данном случае это путь к файйлу dm.ico для инсталлятора, где compiler это папка с компилятором скрипта innosetup (Compil32.exe). Я складываю туда иконки для всех программ для того чтобы не прописывать путь вручную)

UninstallDisplayIcon={app}\dmaster.exe
указывает использовать для uninstall иконку из файла dmaster.exe из папки с установленной программой,
также можно прописать любую другую иконку, но при установке программы придется ее добавлять в дистрибутив и помещать как отдельную иконку, например в папку с установленной программой.
например можно сделать так
UninstallDisplayIcon={app}\newdm.ico
в этом случае файл иконки должен быть в c:\Program Files\Download Master\newdm.ico
если данного файла не будет то будет использована иконка по умолчанию.

boss911 09-01-2008 20:02 712692

Цитата:

Цитата МИШАНЧИК
в Удалении программ иконка деинсталятора отличалась бы от иконки инсталятора »

Простите, совсем забыл про параметр 'UninstallDisplayIcon=путь к файлу' в секции [Setup]. ZaV освежил мою память. :)



Цитата:

Цитата ZaV
например можно сделать так
UninstallDisplayIcon={app}\newdm.ico
в этом случае файл иконки должен быть в c:\Program Files\Download Master\newdm.ico
если данного файла не будет то будет использована иконка по умолчанию. »

В этом случав не обязательно, чтобы иконка или ресурс компилировался вместе с дистрибутивом, можно указать на внешнюю иконку или ресурс с нужным индексом иконки, например:
Код:

[Setup]
UninstallDisplayIcon={sys}\SHELL32.dll,31

31 - последовательный номер индекса иконки в ресурсе, отсчет начинается с "0" (31 - пустая корзина).

ChVL 10-01-2008 20:53 713648

Нет ли плагина к Inno, который бы трансформировал reg-файл в скрипт?
Уж слишком хлопотно ручками copy-paste более сотни ключей, да ещё и отдельными элементами...

jameszero 10-01-2008 21:24 713661

ChVL
Зачем плагин.
Есть удобный редактор, который умеет не только импортировать в скрипт reg файлы, но и ещё много чего полезного.
http://www.istool.org/

snark 13-01-2008 13:14 715572

ChVL, для импорта регфайла в скрипт инно будет достаточно драг-н-дропом перетащить нужный регфайл в программу ISTool в секцию Registry

2 all
script.bat - маленький батник для тех кому неохота для перекомпиляции скрипта заходить в InnoSetup, нажимать кнопку компиляции, закрывать программу...
Код:

@echo off
SET wdir=%~dp0
SET wdir=%wdir:~0,-1%
"%ProgramFiles%\Inno Setup 5\Compil32" /cc "%wdir%\install.iss"
exit

структура каталога
Код:

Embedded
Output
{app} (и др.)
script.bat
install.iss

имя скрипта InnoSetup должно быть всегда install.iss (ну или какое назначите, но только одинаковое для всех)
путь к компилятору тоже может быть отличный от вышеуказанного %ProgramFiles%\Inno Setup 5\Compil32. Меняйте на свой.

Если к тому же хочется сразу запаковать получившийся скомпилированный ехе-шник в sfx-архив (вариант для 7zip; фанаты WinRAR'a могут сотворить нечто подобное) с нужными параметрами, то добавьте к скрипту строки (пример для тотал коммандера 7.02):
Код:

SET INST=totalcmd
SET VERS=702pp
SET INN=.\Output\%INST%%VERS%
SET OUTD=.\Output\%INST%_%VERS%
DEL /Q /S %INN%.7z && DEL /Q /S %OUTD%.exe
"%PROGRAMFILES%\7-zip\7z.exe" a -t7z %INN%.7z %INN%.exe -mx9 -m0=LZMA:d24
COPY /b .\Output\7zSD.sfx + .\Output\config.txt + %INN%.7z %OUTD%.exe
DEL /Q /S %INN%.7z
:: копирование получившегося ехе-шника в папку с софтом
SET beta=d:\UNATTENDED\Silent_install\_beta_
xcopy %OUTD%.exe "%beta%\" /q /y /c
exit


ChVL 15-01-2008 11:09 717195

Когда в ISTool перетаскиваю файлы и папки, то прописывается полный путь каждой(ого) из них. Приходится в каждой строке вручную удалять всё, что находится до {app}. Или я не нашёл какой-то опции?

jameszero 15-01-2008 12:56 717316

ChVL
Самое простое, в том же ISTool выбрать Section-Script (отобразится весь листинг скрипта)
Далее Edit-Replace
В верхнем поле пишем полный путь, например C:\Program Files\MyProg, а в нижнем пишем константу, например {app} и применяем ко всему листингу.

ChVL 15-01-2008 18:34 717637

jameszero,
Понял, спасибо!
Вообще довольно странно, что для такой очевидной цели не предусмотрено конкретного решения.

Litstat 02-02-2008 18:31 731543

snark, несколько упрощенный ваш батник
Код:

@ECHO off
"%ProgramFiles%\Inno Setup 5\Compil32" /cc "%1"
EXIT

Команда на запуск: script.bat имя_скрипта.iss
При предложенной вами структуре каталога указывать путь к скрипту не нужно, плюс батник обрабатывает скрипты с любым именем
Ну и для "совсем ленивых" :wink: ! В реестр добавьте след информацию:
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.iss]
@="InnoSetupScriptFile"

[HKEY_CLASSES_ROOT\InnoSetupScriptFile\shell\CompileWithInnoSetup]
@="Compile with I&nnoSetup"

[HKEY_CLASSES_ROOT\InnoSetupScriptFile\shell\CompileWithInnoSetup\command]
@="\"C:\\Program Files\\Inno Setup 5\\Compil32.exe\" /cc \"%1\""

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

HiGH_ZeRO 05-02-2008 17:40 733608

Вопрос
Есть Autpost firewall pro 2008 исталятор Inno 5.2.1!
Делаю "OutpostProInstall_ru.exe /VERYSILENT /SP-" - но всеравно вилазит окошко выбора языка!
Вопрос как забрать ето окошко или подскажыте чем распаковать Inno 5.2.1 - пробовал Inno Setup unpacker но он говорит что неможет распаковать что файы установки повреждены хотя інсталяция проходит нормально

snark 05-02-2008 19:18 733665

HiGH_ZeRO
поставь в скрипте инно
Код:

[Setup]
ShowLanguageDialog=no

а innounp забирай отсюда (88 кб)

boss911 05-02-2008 20:13 733700

Цитата:

Цитата HiGH_ZeRO
Делаю "OutpostProInstall_ru.exe /VERYSILENT /SP-" - но всеравно вилазит окошко выбора языка! »

Код:

/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.


HiGH_ZeRO 05-02-2008 20:31 733715

boss911
спасибо незаметил

Теперь делаю так

OutpostProInstall_ru.exe /SILENT /LANG=ru /NORESTART - язык вибирается руский но нет тихой установки а появляется стандартое окно продолжения инсталяции

OutpostProInstall_ru.exe /LOADINF="1.inf" /SILENT /NORESTART - такой метод тоже неработает

А содержимое 1.inf уж больно маленькое:
[Setup]
Lang=ru
Dir=D:\Program Files\Agnitum\Outpost Firewall Pro
Group=Agnitum
NoIcons=0
Tasks=

boss911 05-02-2008 21:35 733764

HiGH_ZeRO

Попробуйте так:
Код:

OutpostProInstall_ru.exe /VERYSILENT /SP- /LANG=ru

HiGH_ZeRO 05-02-2008 21:48 733774

Цитата:

Цитата boss911
Код:
OutpostProInstall_ru.exe /VERYSILENT /SP- /LANG=ru »

Не работает
А если извлечь и добавить
Цитата:

Цитата snark
[Setup]
ShowLanguageDialog=no »

То при компиляции возникает куча ошибок:
В скрипте инсталятора указываются пути к файла которых несуществует например:
Source: "{code_GetDest}\zlib,2.dll"; DestDir: "{code:GetDest}"; DestName: "zlib.dll"; AfterInstall: "UpdateComponentControl"; Flags: restartreplace overwritereadonly uninsrestartdelete ignoreversion uninsremovereadonly
mvnmvbnfxcs
zlib,2.dll -такого файла нет есть только zlib,1.dll


когда я удаляю ети ветки то следущая ошибка нет файла licence, я в нужной папке делаю файл licence и после етого выбивает ошыбку {code:GetDest} нет такой переменной

Clim 07-02-2008 09:57 734760

Ветки не удаляй, а сделай из этого файл *,2. Таких там куча будет. На 110 линии кричит, что SandBox.cat нету. А его и правда нет. Чо делать? Попробую накатить из дистрибутива и поискать в виндах.
И по поводу языка установки: в этой версии еще не дошел, но в прошлой, да и во всех инсталяхах, где есть несколько языков, удаляю все нерусские файлы, в секции [Files] удаляю все строки, со ссылками на них, секцию [CustomMessages] тоже чищу, ну и по мелочам, в каждой инсталяхе по разному, но понять без проблем. На выходе имеем только русский язык и меньший размер дистрибутива.
и в секции [Languages] оставляй только ru

HiGH_ZeRO 10-02-2008 00:13 736952

SandBox.cat - есть но в другом каталоге. Я потом посмотрел ето просто дублируются строчки незнаю почему!

Мне уже позно разбиратся- написал AUTOIT скрипт сразу с регистрацыей :)

ChVL 12-02-2008 20:18 738822

Чем лучше всего защитить сборку, скомпилированную с помощью Inno, от распаковывания?

snark 12-02-2008 22:45 738907

ChVL
в корне папки программы InnoSetup есть файл ISCrypt.dll. Это модуль криптования, и его необходимо скачивать отдельно. Подробнее тут, там же и ссылка на закачку.

Цитата:

[Setup]: Encryption
Valid values:
yes or no
Default value:
no
Description:
If set to yes, files that are compiled into the installation (via [Files] section entries) will be encrypted using ARCFOUR encryption, with a 128-bit key derived from the value of the Password [Setup] section directive.
Because of encryption import/export laws in some countries, encryption support is not included in the main Inno Setup installer and must be downloaded and installed separately if you wish to use it. See the Inno Setup Downloads page for more information.
If encryption is enabled and you call the ExtractTemporaryFile function from the [code] section prior to the user entering the correct password, the function will fail unless the noencryption flag is used on the [Files] section entry for the file.
The key used for encryption is a 128-bit MD5 hash of 64-bit random salt plus the value of Password.
При распаковке инсталляционного файла, защищенного паролем, программа распаковки запросит пароль.

в скрипте добавить строки
Код:

[Setup]:
Encryption=true
Password=123456


unikum111 13-02-2008 03:39 739049

Вопрос: при установки собранных с помощью данного инсталятора программ при выборе пункта "Запустить программу такую-то" (по окончании установки) инсталлятор не закрывается, а уходит в свёрнутый режим, и закрывается только после закрытия программы. Как это можно исправить?

Litstat 13-02-2008 03:56 739054

В скрипте в секции [Run] указываем след. флаг:
Код:

Было:
Filename: {app}\dmaster.exe; Description: Запустить Download Master; Flags: postinstall unchecked
Стало:
Filename: {app}\dmaster.exe; Description: Запустить Download Master; Flags: postinstall unchecked nowait

nowait - не ждать завершения запущенной программы и выйти из установки

unikum111 13-02-2008 04:21 739056

Вот так всё просто, мог бы и сам догадаться=)
Спасибо!

ChVL 13-02-2008 17:35 739509

snark,
Вообще-то работает, но чрезвычайно криво.
Открываю запароленный MyProg.exe в Inno Setup Unpacker'e и он спокойно показывает всё содержимое сборки (впрочем, мне это тоже бы не хотелось). Даю команду распаковать и он, как обычно, просит папку. Тыкаю носом - всё, Unpacker намертво зависает. До этого момента, правда, успевает появиться папка {app} с файликом is-00001.tmp нулевого объёма. Никакого запроса пароля не последовало.
В принципе такой сценарий устраивает и даже вполне - это какой же будет мат при попытке распаковать.... Однако, смешно: я ведь тоже не смогу это сделать. Не дай Бог потерять исходники... И зачем тогда пароль?

Для справки:
Inno Setup Compiler 5.2.2
Inno Setup Unpacker 5.2.1

snark 13-02-2008 20:35 739634

ChVL, содержимое сборки - это еще не весь скрипт :)
Я пробовал распаковывать тестовую программу (сделано Inno Setup Compiler 5.2.2) через Uniextract 1.5 + innounp.exe v 0.20 (перепакованная версия с обновленными модулями). Распаковать пытается, спрашивает пароль; если пароля нет - тогда "до свиданья"...
Цитата:

Цитата ChVL
я ведь тоже не смогу это сделать. Не дай Бог потерять исходники... И зачем тогда пароль? »

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

ChVL 14-02-2008 08:33 739873

snark,
Спасибо за деятельное участие.
Ещё. Как построить процедуру введения в скрипт внешних данных через ключ? Например, необходимо ввести в реестр регистрационные данные, которые у каждого пользователя программой свои. Понятно, что для внутреннего использования всё вводится прямо в скрипт.

jameszero 14-02-2008 12:05 739978

ChVL
Если предусматривать поля для ввода регистрационных данных во время установки, то нужно будет "рисовать" эти поля в секции [code], не скажу, что это просто... мануалы почитать придётся.

А с помощью ключей установки регистрацию можно реализовать так:

В скрипт добавляется секция [code]
Код:

[code]
function GetSerial(Param: String): String;
begin
if ExpandConstant('{param:SERIAL}') = '' then
Result := ExpandConstant('{cm:DemoSerial}')
else Result := ExpandConstant('{param:SERIAL}')
end;

function GetName(Param: String): String;
begin
if ExpandConstant('{param:USER}') = '' then
Result := ExpandConstant('{sysuserinfoname}')
else Result := ExpandConstant('{param:USER}')
end;

function GetOrganisation(Param: String): String;
begin
if ExpandConstant('{param:COMPANY}') = '' then
Result := ExpandConstant('{sysuserinfoorg}')
else Result := ExpandConstant('{param:COMPANY}')
end;

В [CustomMessages] и [Registry] добавляется
Код:

[CustomMessages]
DemoSerial=1111-2222-3333-4444

[Registry]
Root: HKLM; SubKey: SOFTWARE\Program; ValueType: string; ValueName: Serial; ValueData: {code:GetSerial}
Root: HKLM; SubKey: SOFTWARE\Program; ValueType: string; ValueName: User; ValueData: {code:GetName}
Root: HKLM; SubKey: SOFTWARE\Program; ValueType: string; ValueName: Company; ValueData: {code:GetOrganisation}

Установка программы с регистрацией:

program.exe /SERIAL=9999-8888-7777-6666 /USER=Pupkin /COMPANY=Home

При установке программы без ключей, подхватится демонстрационный серийный номер из секции [CustomMessages], а имя пользователя и название организации будут взяты системные из Windows

ChVL 14-02-2008 15:44 740139

jameszero,
Понял, спасибо! Особенно интересна последняя фишка. А вот если б ещё без ключей прописывалось "демонстрационное" имя - цены бы ей не было...

К сожалению, дальнейшие исследования функции Encryption показали её полную несостоятельность. Оказалось, что если в секции [Setup] происана строка Encryption, причём, неважно(!) с каким значением: yes или no, то при попытке инсталляции сборки запрашивается Password. Мне это совсем не надо. Что-то тут Jordan Russell или Martijn Laan явно перемудрили (или недомудрили). Если же строку Password не писать или оставить пустой - не компилируется.
Похоже, придётся искать стороннюю программу для защиты от распаковки...

jameszero 14-02-2008 21:19 740350

ChVL
Цитата:

если б ещё без ключей прописывалось "демонстрационное" имя
Если я правильно понял вопрос, то это делается по аналогии с серийным номером.
При отсутствии ключа /USER, в реестр пропишется слово Tester
Код:

[CustomMessages]
DemoSerial=1111-2222-3333-4444
DemoName=Tester

[code]
function GetSerial(Param: String): String;
begin
if ExpandConstant('{param:SERIAL}') = '' then
Result := ExpandConstant('{cm:DemoSerial}')
else Result := ExpandConstant('{param:SERIAL}')
end;

function GetName(Param: String): String;
begin
if ExpandConstant('{param:USER}') = '' then
Result := ExpandConstant('{cm:DemoName}')
else Result := ExpandConstant('{param:USER}')
end;
...


ChVL 15-02-2008 05:21 740485

jameszero,
Да, конечно. Извините за глупый вопрос - в спешке недосмотрел очевидное решение.

Ещё. При старте подключается (при желании) окно с выбором языка инсталлятора. А можно ли к нему "прицепить" и синхронное переключение языка интерфейса, загружаемого по умолчанию? Для этого обычно делается изменение в .ini (или просто выбрать один из двух .ini), или же изменение ключа реестра (или просто запускать один из двух reg-файлов)...

snark 16-02-2008 13:10 741450

ChVL, такое делается следующим образом: есть два ini-файла - русский и английский соответственно. Они привязываются к языку установки, и в зависимости от того, какой язык выбран, устанавливается соответствующий ини файл. В секции Setup должна быть строка
Код:

[Setup]
ShowLanguageDialog=yes

В общем случае ее можно и не писать, так как это опция по умолчанию; главное - чтобы значение параметра не равнялось no, иначе диалога выбора языка не появится.

Снова пример из жизни - установка программы ApBackUp 3.0
Код:

[Files]
Source: {app}\APBackUp,1.exe; DestDir: {app}; DestName: APBackUp.exe
Source: {app}\ApBackUp,1.ini; DestDir: {app}; DestName: ApBackUp.ini
Source: {app}\apbackup,2.ini; DestDir: {app}; DestName: apbackup.ini; Languages: en; Flags: onlyifdoesntexist
Source: {app}\apbackup,3.ini; DestDir: {app}; DestName: apbackup.ini; Languages: ru; Flags: onlyifdoesntexist

Файл ApBackUp,1.ini содержит основные параметры, а файлы apbackup,2.ini и apbackup,3.ini дописывают значения, различные для каждого языка. Можно поступить проще и
Цитата:

Цитата ChVL
Для этого обычно делается изменение в .ini (или просто выбрать один из двух .ini) »

оперировать лишь двумя разными ini - каждый для своего языка. Для первого назначить имя settings,1.ini, для второго - settings,2.ini.
Подобным образом следует поступать и с ключами реестра.

Maxx_81 17-02-2008 17:52 742442

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

unikum111 27-02-2008 16:49 749321

Модераторы, добавьте, пожалуйста следующую информацию в шапку темы.
Официальный сайт
Inno Setup 5.2.2 RU, Зеракло
Русская справка, Зеракло, Зеракло
ISTool 5.2.1, Зеркало, Зеракло
Русификатор ISTool, Зеркало, Зеркало
Inno Setup Script Generator, Зеркало
Unpaker 2.0, Зеркало, зеркало - распаковывает инсталляторы версии 5.2.2
Inno Setup Pack 5.2.2 RU
Примеры скриптов на паскале
Inno Setup Addon 0.07 For Total Commander
Параметры командной строки инсталлятора
читать дальше »

Код:

Программа-инсталлятор поддерживает приведенные ниже параметры командной строки. Они пригодятся системным администраторам и другим программам, вызывающим инсталлятор.
/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталлятора. Выполнится только если DisableStartupPrompt секции [Setup] равна yes.
/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки).
Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим установки очень ускоренный, система перезагрузится не спрашивая.
/LOG
Указывает инсталлятору создать log-файл в папке TEMP для подробного отчета о действиях и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был, log-файл сообщит, что файл был действительно пропущен и почему.
log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не перезаписываются и не дополняются).
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята пользователем.
/LOG="filename"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет заменен. Если файл не может быть создан, установка прервется и выдаст сообщение об ошибке.
/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'.
/NORESTART
Указывает инсталлятору не перезагружать компьютер даже если это необходимо.
/RESTARTEXITCODE=exit code
Задает инсталлятору код, который он должен возвратить, если необходима перезагрузка. Используется с '/NORESTART'.
См. также Коды выхода инсталлятора.
/LOADINF="filename"
Указывает инсталлятору загрузить параметры установки из указанного файла после проверки командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF=' command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.
/SAVEINF="filename"
Указывает инсталлятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.
/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.
/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения. Должен быть задан полный путь.
/GROUP="folder name"
Меняет имя папки на странице Выбор папки меню Пуск. Если директива DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки игнорируется.
/NOICONS
Указывает инсталлятору проверять, выбрана ли команда Не создавать значков на странице Выбор папки меню Пуск.
/COMPONENTS="comma separated list of component names"
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки указывает инсталлятору менять тип установки на Выборочный.
/PASSWORD=password
Задает пароль. Если не указана директива Password секции [Setup], этот параметр игнорируется.
Если введен неправильный пароль, параметр также игнорируется.


boss911 27-02-2008 18:08 749360

Цитата:

Цитата unikum111
Параметры командной строки инсталлятора »

Я уже давно просил.

unikum111 27-02-2008 19:09 749390

Подскажите, пожалуйста, каким образом можно извлечь из инсталлятора секцию [code]? При распаковке инсталлятора в папке "embended" появляется файл CompiledCode.bin, как его расшифровать не понятно, а в самом извлечённом скрипте секция [code] отсутствует.

jameszero 27-02-2008 21:04 749491

unikum111,
Цитата:

Цитата unikum111
Модераторы, добавьте, пожалуйста следующую информацию в шапку темы. »

Добавить не проблема, только кто будет следить за актуальностью ссылок на ifolder?

Цитата:

Цитата unikum111
каким образом можно извлечь из инсталлятора секцию [code]? »

Это невозможно, по крайней мере, никому ещё не удавалось.

unikum111 28-02-2008 09:13 749755

jameszero, хорошо, сделаю ссылки на оффициальные сайты + парочку зеркал, а следить особо на ifolder за ссылками не надо, т.к. по истечении срока файлы перекинут в архив, и их также можно скачать, но посмтрев рекламку.

ChVL 29-02-2008 09:07 750399

Требуется запустить reg файлик. Делаю так:
Код:

[Run]
Filename: {sys}\Regedt32.exe; Parameters: Reg.reg;

Редактор реестра требует подтверждения: "Вы действительно хотите добавить..."
1. Как убрать (пропустить) это окно?
2. Как уничтожить этот Reg.reg после его запуска?

ZaV 29-02-2008 09:35 750409

а требуется именно испоьзование reg файла ? может быть лучше использовать секцию registry
а так
по первому вопросу строка должна быть вида
Код:

regedit /s Reg.reg
т.е надо еще ключик дописать

а насчет удаления можно также в секцию run прописать команду на удаление файла reg.reg

ChVL 29-02-2008 10:56 750452

ZaV,
В том-то и дело, что встретился необычный случай (для меня, по крайней мере), когда программа не видит прописанный в реестр ключ через секцию [Registry]. Запускаю reg файлик - всё нормально, при этом в реестре ничего не меняется.

snark 29-02-2008 11:32 750480

ChVL,
Цитата:

Цитата ChVL
В том-то и дело, что встретился необычный случай (для меня, по крайней мере), когда программа не видит прописанный в реестр ключ через секцию [Registry]. Запускаю reg файлик - всё нормально, при этом в реестре ничего не меняется. »

скрипт в студию!..

ChVL 29-02-2008 13:34 750559

Нашёл решение. Спасибо ZaV за подсказку поставить ключ впереди. Я же пытался прицепить в конце.
Может кому понадобится, рабочий код запуска reg файлика такой:
Код:

[Run]
Filename: {sys}\Regedt32.exe; Parameters: /s Reg.reg; WorkingDir: {app};

Или такой:
Код:

[Run]
Filename: {win}\regedit.exe; Parameters: /s Reg.reg; WorkingDir: {app};

Уточняю второй вопрос: надо удалить файлик Reg.reg из DestDir после того, как он сделал своё дело. Как?

snark:
Из скрипта никакой доп. инфо не вытащить - там самая обыкновенная секция [Registry], которая исправно делает своё дело. Это такая необычная особенность программы.

unikum111 29-02-2008 13:44 750569

ChVL,
Код:

[InstallDelete]
Name: {app}\Reg.reg; Type: files

Лучше стоит разобраться почему не работает из секции [Registry], а то столько лишних проблем, имхо.

ChVL 29-02-2008 13:55 750579

unikum111,
Спасибо!
Дык, проблемы решены, и вылилось это в пару строчек...
А разобраться не удалось - потратил уйму времени на это.

unikum111 29-02-2008 14:02 750588

В следующий раз выкладывй скрипт, вместе подумаем:) Может чего и выйдет.

ZaV 29-02-2008 14:44 750619

если загонял данные в секцию registry через импорт из reg файла
в программе подобной Istool то просто они бывает некорректно их преобразовывают
попробуй поставиь программу с использованием секции registry потом в regedit экспортируй эту ветку в reg файл и сравни с тем reg файлом что есть у тебя. Скорей всего они будут отличаться.
у меня это по моему налюдалось на типе данных
ValueType: binary;

я для того чтобы все работало приводил ее к такому виду
Код:

Root: HKLM; SubKey: Software\test\test; ValueType: binary;ValueData:(23 2a 4d 45 4e 55 5f 53 45 43 54 49 4f 4e 2a 0d 0a cc e5 d4)
у тебя может быть что нибудь наподобие

unikum111 29-02-2008 15:21 750647

jameszero, думаю, можно добавить в шапку. Вот привёл в надлежащий вид, вроде:)
Кто-нибудь знает как пользоваться ROPS 3.0.3.53 disassembler? Вроде он секцию [code] расшифровывает, есил я ничего не путаю.

ChVL 29-02-2008 16:38 750693

unikum111,
Самое интересное: функция удаления не работает! Ничего не понимаю - там даже трёх сосен нет, где можно было бы заблудиться...
Делал так:
Код:

[InstallDelete]
Type: files; Name: {app}\Reg.reg;

И вот так:
Код:

[InstallDelete]
Type: files; Name: {pf}\MyProg\Reg.reg;

- файл не удаляется! Где можно покопать?

ZaV,
Очень хорошая подсказка. Обязательно проверю. В том файле именно binary.
Меня смутило то, что RegShot до запуска файла и после запуска исправно докладывает: изменений в реестре - 0. Если ValueData он не сравнивает, то такой фокус точно может быть.

unikum111 29-02-2008 17:41 750738

ChVL, по идее должен, может с путями что-то... В путях обычно кавычки пишутся, попробуйте так:
Код:

Type: files; Name: "{app}\Reg.reg";

ChVL 02-03-2008 18:36 751878

Вложений: 1
Сложилось впечатление, что гуру этого топика мне не поверили.
В аттаче тестовая программка, где прописано удаление файла в полном соответствии с документацией на Inno Setup Compiler 5.2.2.
В таком виде функция не работает. Помогите разобраться: где тут моя ошибка, или это баг ISC, о чём стОит запросить авторов?

snark 02-03-2008 20:12 751940

ChVL, а если так
Код:

[Files]
Source: {app}\Test.txt; DestDir: {app}; Flags: deleteafterinstall


unikum111 04-03-2008 04:28 752859

Каким образом можно вернуть прежние ассоциации файлов после деинсталляции программы?

ChVL 04-03-2008 11:25 753018

snark,
Эта функция работает, пользовался ею. В данном случае она не устраивает: файл надо удалить после того, как он сделает своё дело - будет запущен или открыт.
Так что, потревожить авторов Inno?

jameszero 04-03-2008 12:27 753071

ChVL
А если так:
Код:

[Files]
Source: {app}\Test.txt; DestDir: {app}; Flags: deleteafterinstall

[Run]
Filename: "{app}\Test.txt"; Flags: shellexec

Если не подходит, опишите конкретную задачу, что и в какой момент времени нужно запустить, а потом удалить.

ChVL 05-03-2008 09:07 753659

jameszero,
Всё работает как надо.
Очевидно, что флаг deleteafterinstall срабатывает тогда, когда пройден весь скрипт, в том числе и секция [Run]. На такой алгоритм мне и следовало обратить внимание. Спасибо за науку.
И всё-таки секция [InstallDelete] команды не выполняет - явный баг, IMHO.

snark,
Вероятно Вы имели ввиду это же решение. Прошу прощения, что не понял сразу.

jameszero 05-03-2008 16:06 753973

ChVL
[InstallDelete] отрабатывает до установки. По крайней мере, так сказано в справке.
Цитата:

... entries are processed as the first step of installation.

ChVL 05-03-2008 17:04 754014

jameszero,
Дык, не отрабатывает ни - до, ни - после! - Файл не удаляется.

jameszero 05-03-2008 18:13 754065

ChVL
На примере скрипта из 181 поста:
Предварительно создаём папку Profram Files\Test, кладём в неё файл Test2.txt и компилируем скрипт
Код:

[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputBaseFilename=Test
DefaultGroupName=Test
Compression=lzma

[Files]
Source: "{app}\Test.txt"; DestDir: "{app}";

[InstallDelete]
Type: files; Name: "{app}\Test2.txt";

Инсталлируем программу - файл Test2.txt удалён, Test.txt "установлен".

Из [InstallDelete] неполучится удалить файл Test.txt потому, что эта секция срабатывает до секции [Files] (если быть точнее, файл удаляется и сразу создаётся опять).

ChVL 06-03-2008 10:51 754488

jameszero,
То, что и как Вы раскопали, - просто класс!
Реально имеет право на существование и такой вариант: файлы имеют одинаковое название, а содержание - разное. Это может быть полезно в том случае, когда делается инсталляция программы более поздней версии поверх предыдущей, и при этом необходимо какой-то файл(ы) заменить новой версией.

snark 06-03-2008 14:32 754672

ChVL,
Цитата:

Цитата ChVL
файлы имеют одинаковое название, а содержание - разное. Это может быть полезно в том случае, когда делается инсталляция программы более поздней версии поверх предыдущей, и при этом необходимо какой-то файл(ы) заменить новой версией. »

вот в мануале условия замены существующих файлов
Цитата:

Remarks
If a file already exists on the user's system, it by default will be replaced according to the following rules:

If the existing file is an older version than the file being installed (as determined by the files' version info), the existing file will be replaced.
If the existing file is the same version as the file being installed, the existing file will not be replaced, except if the replacesameversion flag is used and the content of the two files differs.
If the existing file is a newer version than the file being installed, or if the existing file has version info but the file being installed does not, the existing file will not be replaced.
If the existing file does not have version info, it will be replaced.
то есть вкратце, существующий файл заменяется новым, если:
1. он старше по дате (определяется по дате в свойствах файла);
2. указан флаг replacesameversion в свойствах нового файла или содержание файлов различно;
3. у существующего файла нет версии (version info).

jameszero 06-03-2008 15:35 754727

snark
Всё верно, для замещения старого файла новым, шаманств с [InstallDelete] не потребуется, но допустим такая ситуациия:
Программа при первом запуске создаёт свои конфигурационные файлы и с ними работает, а в следующей версии автор решает изменить формат (имена) этих файлов. Вот тут и пригодится [InstallDelete]

snark 06-03-2008 17:39 754804

jameszero, да, такой вариант я что-то не продумал... Подходит идеально.
И хотя ChVL имел в виду именно одинаковое имя и разное содержание, бывают же случаи, когда все наоборот

sabah 12-03-2008 00:40 758259

скажите можно ли извлеч файлы из setup-1.bin,setup-2.bin,... если фаил setup.exe потерян?
при запуске innounp.exe выдает сообщение о повреждениях и несовместимостях
unpacker последней версии

ChVL 12-03-2008 20:20 758879

Как сделать, чтобы любым unpacker'ом нельзя было добраться до скрипта? Устроит любой вариант, к примеру:
- скрипт не извлекается (как будто его и нет);
- извлекается, но не читается;
- извлекается, но запаролен.

boss911 13-03-2008 02:50 759119

Цитата:

Цитата ChVL
Как сделать, чтобы любым unpacker'ом нельзя было добраться до скрипта? »

Запаролить дистрибутив, но кому надо, тот распакует. :)
Но опять же, не все так просто. ;)

ChVL 13-03-2008 05:27 759148

boss911,
Это я уже пробовал. Не подходит. Речь идёт о скрипте. Дистрибутив должен использоваться как обычно, т.е. пользователь сборки может и не догадываться о существовании скрипта в принципе.

ZaV 13-03-2008 10:04 759236

Цитата:

Цитата ChVL
Как сделать, чтобы любым unpacker'ом нельзя было добраться до скрипта? »

Могу посоветовать поподробнее изучить секцию code по идее её средствами можно сделать все что угодно ... но это не самый простой путь.
Второе перейти на другой инсталлятор в котором невозможно получить скрипт установки в том виде в каком он был до компиляции дистриба (например Nsis)
Ну и третье а что у тебя действительно такой серьезный проект что его надо так защищать ?
Ведь если у тебя используются только те функции что предоставляет innosetup (без серьезного использования секции code и внешних библиотек), то твой инсталлятор скорей всего очень легко будет сделать самостоятельно просто отслеживая изменения файловой системы и реестра. Ну еще может пару библиотек зарегистрировать придется.

ChVL 13-03-2008 16:05 759504

ZaV,
Цитата:

секцию code по идее её средствами можно сделать все что угодно
IMHO, с помощью секции [code] можно творить чудеса в пределах компилятора, но она, в моём представлении, бессильна вне скрипта, что по определению требуется для решения поставленной задачи. Или я не прав?
Цитата:

перейти на другой инсталлятор
Это понятно, только вот нет желания...
Цитата:

действительно такой серьезный проект
Да нет, не так уж серьёзно. Понадобилось скрыть регистрационные данные. В реестре это явным образом не засвечено, а вот в скрипте легко можно засечь. Есть и другой прецедент. Сознаю, что для грамотного программера любые ухищрения с защитой – семечки, но никто из них копаться не станет. Хотелось бы защититься от массы любителей запускать unpacker.

WindoStroy 15-03-2008 23:15 761317

ChVL,

вот может поможет:


Цитата:

Простенький способ криптования инсталлятора c использованием подсчета хеша MD5 "обманных" символов. (Пароль будет находиться в памяти). Требуется ISCrypt.dll в одной папке с Inno Setup

Цитата:

[Setup]
AppName=Pass
AppVerName=Pass
DefaultDirName={pf}\Pass
Uninstallable=No
Encryption=Yes
;MD5 сумма, подсчитанная ниже
Password=449f2546d2a51b20442c5025c43f126f

[Files]
Source: "C:\1.txt"; DestDir: "{app}"

[code]
procedure InitializeWizard();
var
MD5: String;
begin
//Подсчитываем сумму слагаемых в MD5 калькуляторе, на примере сумма MD5 "````" равна 449f2546d2a51b20442c5025c43f126f
MD5 := GetMD5OfString(''+'`'+'``'+'`')
WizardForm.PasswordEdit.Visible:= False;
//Вставляем то, что складываем
WizardForm.PasswordEdit.Text:= MD5;
end;

//Как обычно нажимаем страницу с пассом
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
(с) Kindly

YikxX 16-03-2008 04:09 761403

Не в курсе, писалось или нет - После отработки инсталлера Inno Setup в секции реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ появляется раздел, в котором прописаны все опции, выбранные при установке программы. Если эти записи добавить в реестр перед запуском самого инсталлятора, то прога поставится точно в такой же конфигурации. Имя раздела, вроде, для каждой проги прописано жестко и не меняется (остается его лишь найти и экспортировать в reg-файл с последующим удалением ненужных строк).

ChVL 18-03-2008 08:38 762658

Проблему защиты от распаковки можно решить следующим образом. В простейшем случае в секцию [Setup] дописываются две строчки и добавляется секция [ Code ]:
Код:

[Setup]
Encryption=Yes
Password=1a2b3c4d

 [ Code ]
procedure InitializeWizard();
begin
WizardForm.PasswordEdit.Visible := False;
WizardForm.PasswordEdit.Text := '1a2b3c4d'
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;

В этом случае пароль сохраняется в инсталляторе в явном виде.
Если же у вас есть желание скрыть пароль, то сгенерируйте для него MD5 хэш и сравните с помощью функции GetMD5OfString. Полностью этот способ привёл WindoStroy в посте #200.
Не забудьте в папку Inno Setup 5 (в PF) положить файл ISCrypt.dll.
В обоих случаях при инсталляции программы пользователь не заметит, что она запаролена, т.к. на старте пароль вводится из памяти с помощью скрипта секции [code]. Если же попытаться программу распаковать, то unpacker намертво зависает…

jameszero 18-03-2008 08:58 762671

ChVL
К сожалению, способ не универсален - защищаются от распаковки только файлы программы, а сам скрипт легко извлекается Unpacker-ом

ChVL 18-03-2008 10:30 762730

jameszero,
Цитата:

скрипт легко извлекается Unpacker-ом
Каким? Пробовал Inno Setup Unpacker Explorer 2.0 - не распаковывает, в том числе и скрипт.

jameszero 18-03-2008 16:15 763004

ChVL
В Unpacker-е нужно выделить не все файлы, а только скрипт.

WindoStroy 18-03-2008 22:15 763280

Вышла версия 5.2.3.
http://www.jrsoftware.org/download.php/is.exe
http://www.jrsoftware.org/download.php/is.exe?site=1

Секция Code, идёт в бинарном файле, через секцию Code можно добавить параметры в реестр, и вот защита.

могу порекомендовать обратится сюда, возможно найдётся другое решение:
http://forum.ru-board.com/topic.cgi?...&start=1080#lt

ChVL 19-03-2008 09:26 763479

jameszero,
Цитата:

Цитата jameszero
К сожалению, способ не универсален »

Ну, не всё совсем уж так безрадостно, ибо извлечённый скрипт усечён. В нём нет пароля и нет секции [code] – это наиболее важные моменты. Тем не менее в каких-то случаях может не устроить то, что там полностью представлена секция [Registry].

boss911 20-03-2008 00:46 763990

Цитата:

Цитата ChVL
В нём нет пароля »

Пароль можно достать из бинарного файла, но, насколько мне известно, это немного геморно.

woodyfon 20-03-2008 02:37 764026

Как убрать окно приветствия мастера Inno Setup
 
Можно ли, и если можно, то как убрать окно приветствия в мастере установки приложения Inno Setup?
Окно приветстия добавляю как скриншот. Хочу сделать на подобие самораспаковівающиегося архива, но в inno setup можно прописать ключи реестра, путь установки, назначить иконки и т. д.
В общем хотелось узнать как сделать установку программі, чтобы она устанавливалась в фоновон режиме, т. е. пользователь не мог ни на что повлиять, а программа корректно установится. Короче говоря, хочется иметь такой дистрибутив прог, который есть на диске Zver-я.

boss911 20-03-2008 02:53 764027

Цитата:

Цитата woodyfon
В общем хотелось узнать как сделать установку программі, чтобы она устанавливалась в фоновон режиме »

Для этого достаточно запустить инсталлятор с ключом /VERYSILENT
Inno Setup Command Line Options

Цитата:

Цитата woodyfon
как убрать окно приветствия в мастере установки приложения »

Пропишите в секцию [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;


woodyfon 20-03-2008 03:02 764029

Цитата:

Цитата boss911
Для этого достаточно запустить инсталлятор с ключом /VERYSILENT
Inno Setup Command Line Options »

Немного уточню, запустить скомпилированный инсталлятор из командной строки Windows?
Цитата:

Цитата boss911
[Codе]
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; »

Код не проканывает! Дописал его в конце скрипта, ничего не изменилось! может ее надо где-то вызвать?

boss911 20-03-2008 03:41 764032

Цитата:

Цитата woodyfon
запустить скомпилированный инсталлятор из командной строки Windows? »

Совершенно верно.

Цитата:

Цитата woodyfon
Код не проканывает! »

А вы пропишите название секции 'Code' самостоятельно.

woodyfon 20-03-2008 03:58 764037

Правильно заметили, что просто скопировал и вставил :).
Расскажите немного о функции SendMessage. Прочитал справку, а описания ее параметров не наешл.
Процедура CurPageChanged отвечает за определенную страницу мастера. Ее параметр CurPageID=wpWelcome есть страница приветствия или окно приветствия. Когда появляется окно приветствия вызывается процедура SendMessage. Она имеет 4 параметра. Расскажите плиз о самой функции и ее параметрах.

boss911 20-03-2008 04:21 764040

Цитата:

Цитата woodyfon
Расскажите плиз о самой функции и ее параметрах. »

Это уже не ко мне, так как с программированием я на "вы", увы. :not-me:

Цитата:

Цитата woodyfon
есть страница приветствия или окно приветствия. »

Это я точно знаю, что страница приветствия. :)

ChVL 20-03-2008 08:46 764095

boss911,
Цитата:

Цитата boss911
Пароль можно достать »

Дык, можно закриптовать. А извлечённый хэш никому не нужен...

WindoStroy 20-03-2008 21:11 764559

имея хеш, можно легко подобрать пароль.

mariolast 25-03-2008 00:34 766998

Распаковал файл GoldfishAquarium-V2.exe

Получил install_script.iss с содержанием ниже. Только если его обратно запаковать, то при установке оно ставит в меню Пуск-Программы название Default, а как его вообще убрать, чтоб не ставило, то не вижу такой строки...

[Setup]
AppName=LifeGlobe Goldfish Aquarium 2.0
AppVerName=Goldfish Aquarium 2.0
DefaultDirName={pf}\Prolific Publishing, Inc.\Goldfish Aquarium 2.0
OutputBaseFilename=setup
Compression=lzma

[Files]
Source: {sys}\Goldfish2.scr; DestDir: {sys}; Flags: ignoreversion
Source: {app}\ReadMe.txt; DestDir: {app}; Flags: ignoreversion
Source: {app}\www.prolific.com.url; DestDir: {app}; Flags: ignoreversion

[Registry]
Root: HKLM; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; ValueName: Version; ValueType: String; ValueData: 2.0; Flags: uninsdeletekey
Root: HKCU; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: Software\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; ValueName: gAtt; ValueType: Binary; ValueData: 04 00 00 00; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; ValueType: binary; ValueName: RegCode; ValueData:xxx - модератор: Публикация лицензионных ключей и кодов запрещена ОПК 3.18 !!!
Root: HKLM; SubKey: SOFTWARE\Prolific Publishing, Inc.\LifeGlobe\GoldfishAquarium2; ValueType: binary; ValueName: RegCode; ValueData: xxx - модератор: Публикация лицензионных ключей и кодов запрещена ОПК 3.18 !!!
Root: HKCU; SubKey: Control Panel\Desktop; ValueType: string; ValueName: SCRNSAVE.EXE; ValueData: Goldfish2.scr

[Run]

[Icons]
Name: {group}\Goldfish Aquarium 2.0\Goldfish Aquarium 2.0; Filename: {sys}\Goldfish2.scr; WorkingDir: {sys}
Name: {group}\Goldfish Aquarium 2.0\Goldfish Aquarium 2.0 Read Me; Filename: {app}\ReadMe.txt
Name: {group}\Goldfish Aquarium 2.0\Uninstall LifeGlobe Goldfish Aquarium 2.0; Filename: {app}\unins000.exe
Name: {group}\Goldfish Aquarium 2.0\Prolific Publishing on the Web; Filename: {app}\www.Prolific.com.url
Name: {userdesktop}\Goldfish Aquarium 2.0; Filename: {sys}\Goldfish2.scr; WorkingDir: {sys}
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Goldfish Aquarium 2.0; Filename: {sys}\Goldfish2.scr; WorkingDir: {sys}

[Tasks]

[CustomMessages]
NameAndVersion=%1 version %2
AdditionalIcons=Additional icons:
UninstallProgram=Uninstall %1
AssocFileExtension=&Associate %1 with the %2 file extension
AssocingFileExtension=Associating %1 with the %2 file extension...

mariolast 25-03-2008 01:00 767008

метод /LOADINF="filename" не работает, неизвестно, откуда он его считывает

unikum111 25-03-2008 08:47 767087

Цитата:

Цитата mariolast
Получил install_script.iss с содержанием ниже. Только если его обратно запаковать, то при установке оно ставит в меню Пуск-Программы название Default »

Нужно добавить в секцию [Setup] строку:
Код:

DefaultGroupName=LifeGlobe Goldfish Aquarium 2.0 (полсе знака "=" можеете написать всё что угодно)
Цитата:

Цитата mariolast
а как его вообще убрать, чтоб не ставило, то не вижу такой строки... »

добавить в секцию [Setup] строку (страница с выбором будет, но установка в меню пуск не произойдёт, там будет стоять отменяющий флажок):
Код:

AllowNoIcons=yes
Чтобы совсем отключить стрницу выбора программной группы нужно добавить в секцию [Setup] строку:
Код:

DisableProgramGroupPage=yes
Для более плотного сжатия можно также в секцию [Setup] добавить строку:
Код:

SolidCompression=yes
Обычно распакованный скрипт несколько отличается от оригинального, поэтому приходится подправлять.

fox_cub 25-03-2008 19:30 767597

Столкнулся с проблемой распаковки инсталляторов созданных последней версией...В частности DVDFab4120...В чём проблема не знаю....

boss911 26-03-2008 01:06 767762

Цитата:

Цитата fox_cub
Столкнулся с проблемой распаковки инсталляторов созданных последней версией... »

Если было упаковано 5.2.3 версией, то innounp 0.20, тестовый билд от 27.10.07, не распакует его. Новой версии на данный момент нет, к сожалению, а разработчик что-то давно не шевелится.

unikum111 27-03-2008 16:48 769085

В Inno Setup есть встроенная функция SetIniString, она задаеётся в секции [code]. Подскажите как должен выглядеть скрипт, если мне необходимо, после окончания установки прописать в секцию [Settings] , параметр Language, значение {app}\test.lng. Сам ini-файл находится {userappdata}\test\test.ini

boss911 27-03-2008 17:33 769139

unikum111

Если я правильно понял, то секцию [code] тут не обязательно использовать, так как Inno Setup умеет работать с ini файлами через секцию [INI] -

Код:

[INI]
Filename: {userappdata}\test\test.ini; Section: Settings; Key: Language; String: {app}\test.lng


unikum111 28-03-2008 14:22 769762

Представляю Вашему вниманию полный комплект Inno Setup.
В сборку входят следующие компоненты:
Inno Setup compiler 5.2.2 русская версия;
ISTool 5.2.1 русская версия;
Inno Script Generator английская версия;
Inno Setup Unpacker Explorer 1.0 аглийская версия;
Примечание: в Inno Setup Unpacker Explorer 1.0 заменён innounp.exe на тестовую версию 2.0, так что распаковывает инсталляторы вплоть до версии 5.2.2.
Есть возможность выбора компонентов.
Не предусмотрена деинсталляция отдельных компонентов, только всех сразу (пока не знаю как сделать).
Скачать: ifolder, RapidShare, iBox (Размер: 5.34 Mb).

SamLab 10-04-2008 14:46 778935

Что прописать в командной строке после /VERYSILENT чтобы блокировать запуск программы после установки? иначе придется taskkill /F /IM *.exe /T

unikum111 11-04-2008 03:28 779297

SamLab, можно перепаковать инсталлятор, убрав запуск после установки (хотя бы отменить умолчание):)
Иначе taskkill.

WindoStroy 13-04-2008 09:36 780490

SamLab, а что вообще за программа. Если это Uninstall Tool, то у меня есть готовый скрипт.

SamLab 15-04-2008 08:42 781618

WindoStroy, STDU Viewer

4sag 15-04-2008 10:15 781661

SamLab, у меня есть готовый скрипт

SamLab 19-04-2008 19:28 784964

4sag, Можешь выложить или выслать на samlab(гав)list.ru

katok888 24-04-2008 15:29 788292

Вышел новый Unpacker 0.23 , поддерживает Inno Setup 5.2.3

katok888 24-04-2008 21:32 788569

Китайский Unpacker 0.23+GUI . Работает нормально, только название скрипт после распаковки на китайском.

12gauge 26-04-2008 10:05 789511

woodyfon,

в секции [Setup] прописать:

DisableStartupPrompt=yes

Котяра 23-05-2008 19:34 809414

Делаю инсталлятор для скринсейвера, так вот вопрос: как добавить экран "Выберите папку для сохранения инсталлятора", меняющий UninstallFilesDir.

Помогите!

katok888 24-05-2008 16:26 809889

Котяра, UninstallFilesDir определяет папку деинсталятора.

Котяра 24-05-2008 19:30 809971

Цитата:

Цитата katok888
Котяра, UninstallFilesDir определяет папку деинсталятора. »

Мне нужно именно это. Просто опечатался :)

zombie2003 03-06-2008 18:13 817546

Помогите, пожалуйста.
Раньше никогда не занимался сборкой установочных пакетов, а сейчас пришлось.
Поиском в этой теме посмотрел, но ничего не нашел.
Можно ли собрать такой инсталл.пакет, который будет выполнять некоторые действия, перезагружать компьютер и продолжать установку?
Спасибо.

Grabber2006 03-06-2008 18:56 817575

Я бы сделал так:
1. Ставим драйвер/сервис
2. Распаковываем вторую часть инсталлера в %TEMP%
3. Добавляем ключ для запуска в HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
4. Перезагружаем

Serega 03-06-2008 23:44 817808

Здравствуйте, хочу предложить Inno Setup Unpacker Explorer 1.0 русская версия скачать с iBox
а также очень полезная утилита Regshot 2.0 unicode Автор: Белогорохов Юрий Павлович сайт в отличие от общераспространенного regshot 1.8.2, эта утилита сохраняет изменения сделанные при установке программ прямо в виде *.reg и *.inf файлов!!!
читать дальше »
Цитата:

Утилита умеет делать снимки реестра. Снимки может сохранять в файл, чтобы в последствие снятый снимок можно было загрузить снова. Так же может сравнивать два снимка с формированием отчёта по изменениям содержимого реестра. Отчёт формируется только в HTML формате для придания ему большей читабельности. Кроме отчёта в процессе сравнения формируются два файла (UNDO.reg и REDO.reg) в формате REGEDIT5 для приведения реестра в состояние соответствующее снимку 1 и снимку 2 соответственно. Руками уже ничего править не нужно, в файлах уже всё записано, какие новые параметры и разделы удалить, и какие изменённые и удалённые параметры восстановить. Кроме этого можно включить по желанию генерацию INF-файлов, содержащих информацию об изменениях реестра.

Котяра 04-06-2008 00:50 817896

Цитата:

Цитата Grabber2006
Распаковываем вторую часть инсталлера »

А как сделать вторую часть?
Как автономный инсталлер, сделанный Inno Setup?

Grabber2006 04-06-2008 01:07 817905

Котяра, zombie2003,

К сожалению, я с такой задачей не сталкивался. Обычно я сетапы делаю NSIS.
Попробуйте отследить действия инсталляторов Alcohol и Daemon Tools (с помощью FileMon, RegMon, Advanced Registry Tracer).

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

prodist 07-06-2008 22:49 821177

Можно ли в Inno Setup сделать так, чтобы при установке файлы копировались из папки, лежащей вместе с инсталлятором). Т.е. не запаковывались ни в архив (с сжатием или без), ни в отдельный bin-файл. Например, setup.exe копирует папки и файлы из папки) Setup, в которую можно зайти и без установки запустить приложение.

boss911 07-06-2008 23:33 821199

Цитата:

Цитата prodist
чтобы при установке файлы копировались из папки, лежащей вместе с инсталлятором »

Код:

[Files]
Source: {src}\Setup\PROG.exe; DestDir: {app}; Flags: external

{src} - папка, из которой запущен инсталлятор.
external - означает, что файл внешний.

prodist 08-06-2008 00:52 821228

спасибо. сейчас проверим)

все работает. как это я не догадался про external))

Serega 08-06-2008 01:16 821237

Цитата:

Цитата prodist
Можно ли в Inno Setup сделать так, чтобы при установке файлы копировались из папки, лежащей вместе с инсталлятором). Т.е. не запаковывались ни в архив (с сжатием или без), ни в отдельный bin-файл. Например, setup.exe копирует папки и файлы из папки) Setup, в которую можно зайти и без установки запустить приложение.

Если я правильно понял - рядом с инсталятором должна находится папка например data в которой размещены файлы, которые нужно копировать в папку устанавки прграммы, тогда:
Код:

[Files]
Source: "{src}\data\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external


boss911 08-06-2008 01:45 821250

Цитата:

Цитата Serega_
Если я правильно понял »

Да, вы правильно поняли, но вы практически повторили мой ответ.

Serega 08-06-2008 08:09 821279

Цитата:

Цитата boss911
Да, вы правильно поняли, но вы практически повторили мой ответ.

Извиняюсь за неопытность, просто не обновлял данную страницу и не видел, что решение проблемы уже есть... а как удалить сообщение - не знаю. В следующий раз буду повнимательней...sorry...

qwer81 08-06-2008 11:52 821341

Как поставить папку на пароль?

Котяра 08-06-2008 18:23 821577

Цитата:

Цитата qwer81
Как поставить папку на пароль? »

Причем тут Inno Setup? Пароль на инсталляцию?

MAY8 16-06-2008 20:15 827516

Вопрос к специалистам.
Решил перепаковать кодеки Combined Community Codec Pack с целью заменить плеер на русскую версию.
При компиляции ругается: Required function or procedure "HaaliRendererRegister" not found

Код:

Source: "{app}\Filters\Haali\dxr.dll"; DestDir: "{app}\Filters\Haali"; Components: "HaaliSplitter"; AfterInstall: "HaaliRendererRegister"; MinVersion: 0.0,5.0; Flags: restartreplace uninsrestartdelete ignoreversion
Что делаю не так ?

boss911 16-06-2008 20:56 827548

Цитата:

Цитата MAY8
Required function or procedure "HaaliRendererRegister" not found »

Видимо дело в том, что когда распаковался инсталлятор и его скрипт, то в нем потерялась секция 'Code' (код в Паскале). Вот в этом коде и была написана процедура "HaaliRendererRegister". Что было написано в секции 'Code', можно только догадываться.

Сдается мне, что это банальная регистрация библиотеки (компонента), тогда зачем надо было писать для этого код, когда достаточно добавить флаг 'regserver', хотя, я могу ошибаться, а код может выполнять и другие дополнительные функции. Попробуйте заместь:
Код:

Source: "{app}\Filters\Haali\dxr.dll"; DestDir: "{app}\Filters\Haali"; Components: "HaaliSplitter"; AfterInstall: "HaaliRendererRegister"; MinVersion: 0.0,5.0; Flags: restartreplace uninsrestartdelete ignoreversion
заменить на:
Код:

Source: "{app}\Filters\Haali\dxr.dll"; DestDir: "{app}\Filters\Haali"; Components: "HaaliSplitter"; MinVersion: 0.0,5.0; Flags: restartreplace uninsrestartdelete ignoreversion regserver

ChVL 20-06-2008 15:22 831081

Есть ли у Inno возможность работать с процессом, находящимся в RAM?
Конкретнее: запущена программа, её процесс находится в RAM системы. Может ли Inno обратиться к нему и там сделать правки с помощью, например, секции [code]? Надо что-то аналогичное BOOL WriteProcessMemory.

Serega 22-06-2008 15:17 832314

Уважаемые модераторы, предлагаю в шапке темы разместить следующие ссылки:
Обложка для Inno Setup с проверкой системных требований - Corona Skin & Check System Requirements, Домашняя страница, Скриншот, Скачать обложку для Inno Setup
описание:
Кроме визуального стиля Corona(WMP9) в инсталлятор по выбору пользователя добавляется:
Проверка системы/минимальных требований. Подсчёт времени установки. Вывод даты сборки. Защита от многократного запуска. Деинсталляция программы перед установкой. Удаление оставшихся после деинсталляции файлов. Автонастройка процесса сборки. Шифрование. Поддержка файлов пользователя. Подсчёт объёма папок. Разные действия при левом/правом щелчке мыши. Запуск настроек системы клавишами F1-F12. Объём и кол-во скопированных файлов на прогрессбаре. Экран справки/скриншотов. Слайдшоу, SCR, BMP или AVI-файл в фоновом окне. Проигрывание музыки в фоне и многое другое...
К инсталлятору добавляется всего 35 Кб (~313 Кб со всеми необязательными файлами), для компиляции скрипта требуется Inno Setup Preprocessor.

Inno Setup на практике, скачать

Inno Setup Unpacker Explorer 1.0 русская версия (перевод), скачать

Если требуется узнать, какие ключи в реестр вносит та или иная программа, то понадобится Regshot 2.0 unicode - домашняя страница,
описание:
Утилита умеет делать снимки реестра. Снимки может сохранять в файл, чтобы в последствие снятый снимок можно было загрузить снова. Так же может сравнивать два снимка с формированием отчёта по изменениям содержимого реестра. Отчёт формируется только в HTML формате для придания ему большей читабельности. Кроме отчёта в процессе сравнения формируются два файла (UNDO.reg и REDO.reg) в формате REGEDIT5 для приведения реестра в состояние соответствующее снимку 1 и снимку 2 соответственно. Руками уже ничего править не нужно, в файлах уже всё записано, какие новые параметры и разделы удалить, и какие изменённые и удалённые параметры восстановить. Кроме этого можно включить по желанию генерацию INF-файлов, содержащих информацию об изменениях реестра.

Если необходимо использовать метод проверки внешнего файла через сумму MD5 для запуска инсталлятора, то понадобится калькулятор хеша MD5, калькулятор сумм MD5, SHA-256, CRC32.

boss911 22-06-2008 17:32 832386

Serega_

Уж больно она будет похожа на шапку из ru-board, текст то оттуда.

Serega 22-06-2008 19:01 832457

boss911, извини, а причём тут похожесть или схожесть? Да, некоторые ссылки оттуда, но если это кому-то поможет, то почему бы и нет? Ведь тема называется Inno Setup .:[все вопросы]? Скажу честно, я об Inno Setup узнал только с этого форума, заинтересовался... Прочитав "Русская справка" к Inno Setup и "Примеры скриптов на паскале" начало кое-что получаться... нашёл где-то в интернете "Inno Setup на практике", тоже интересная вещь. Ведь не все сразу рождаются программистами, у меня допустим это - хобби. Я предложил, а добавлять или нет, решать Вам...

boss911 22-06-2008 19:42 832484

Цитата:

Цитата Serega_
извини, а причём тут похожесть или схожесть? »

А то, что получается под копирку, имхо.

alex_84 17-07-2008 13:30 853975

а каким образом сделать дополнение к программе с помощью него? Например чтобы он определил, что программа установлена и если установлена то куда? Чтоб самому путь не прописывать. (на примере патчей для Сталкера)

МИШАНЧИК 03-08-2008 12:50 866870

Подскажите пожалуйста!
Как сделать, чтоб внизу инсталятора была "бледная" надпись Copyright © 2008?
Я добавляю в [Setup]
WindowVisible=yes
AppCopyright=Copyright © 2008 - но надписи нет. В чём ошибка?

jameszero 03-08-2008 15:02 866948

МИШАНЧИК

Код:

[Messages]
BeveledLabel=Copyright © 2008


МИШАНЧИК 04-08-2008 08:29 867315

jameszero,
Большое Человеческое спасибо!

МИШАНЧИК 06-08-2008 14:38 869444

Подскажите пожалуйста!
Не получается назначить принудительно каталог установки: C:\Program Files\Total Commander\Utils\ХХХХ.
Прописываю:
[Setup]
DefaultDirName={pf}\Total Commander\Utils\ХХХХ
А получается:C:\Program Files\ХХХХ
Как правильно прописать?

Serega 12-08-2008 23:49 874089

Цитата:

Цитата МИШАНЧИК
А получается:C:\Program Files\ХХХХ

не может такого быть - всё у вас правильно написано:
Цитата:

[Setup]
.....
DefaultDirName={pf}\Total Commander\Utils\ХХХХ
.....
- туда и должна ставить. Если всё равно не получается, то напечатайте скрипт.

boss911 13-08-2008 00:55 874116

Цитата:

Цитата МИШАНЧИК
Не получается назначить принудительно каталог установки »

Какой каталог назначения указываете в секции Files? Дайте полный пример скрипта.

МИШАНЧИК 17-08-2008 08:48 876974

boss911,
Выкладываю скрипт.

Serega 17-08-2008 14:17 877124

МИШАНЧИК, видимо вы используете скрипт после распаковки?
1. Сразу, что бросилось в глаза
Цитата:

[Setup]
...........................
DefaultDirName=={pf}\Total Commander\Utils\USB Safely Remove
...........................
один знак "=" надо удалить.
2. Зачем перичислять все файлы, когда можно просто
Цитата:

[Files]
Source: C:\USB Safely Remove\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
т.е создайте папку USB Safely Remove на диске С или укажите свой путь к папке.
... всё вроде освободился, можно продолжить...
Флаги обозначают:
ignoreversion - перемещать существующие файлы не обращая внимание на номера версий;
recursesubdirs - указывает компилятору или инсталлятору также искать файлы с тем же именем/маской в подпапках папки, указанной в параметре Source;
createallsubdirs - создаёт все подпаки.
Если программа у вас уже установлена, тогда пропишите правельный путь до неё. Если хотите, чтоб компилятор исключил какие-то файлы из каталога установленной программы, нужно использовать Excludes
Цитата:

[Files]
Source: C:\USB Safely Remove\*; Excludes: unins000.*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
у себя я исключал unins000.dat и unins000.exe, поэтому и использовал маску unins000.*

boss911 17-08-2008 17:44 877189

МИШАНЧИК
Код:

DefaultDirName=={pf}\Total Commander\Utils\USB Safely Remove
Да, видимо в этом и есть ваша проблема.

МИШАНЧИК 18-08-2008 10:38 877631

Serega_, boss911,
Всем большое спасибо. Да, не доглядел я.

Junos 24-08-2008 10:50 882420

Подскажите как избавится от этого файла?

Serega 24-08-2008 12:18 882448

Junos, из скрипта я не понял, почему ставиться этот ярлык, судя по всему вы дали не полный скрипт. Если он прописывается всё равно, то можно удалить его с помощью cleanup.cmd, т.е. делаете cleanup.cmd в котором прописываете удаление этого ярлыка. В секции Files прописываете копирование cleanup.cmd в папку с приложением с флагом удаления после установки программы, а в секции Run прописываете запуск этого *.cmd. Т.е должно получиться так:
Код:

[Files]
…………………………
Source: J:\cleanup.cmd; DestDir: {app}; Flags: deleteafterinstall
………………………………

[Run]
Filename: {app}\cleanup.cmd; WorkingDir: {app}; Flags: runhidden

deleteafterinstall – указывает инсталлятору устанавливать файл как обычно, но удалять его после завершения (или прервания) установки;
runhidden - программа запустится в скрытом окне.

Junos 24-08-2008 12:28 882456

Serega_,
Цитата:

судя по всему вы дали не полный скрипт.
Я дал полный

Цитата:

ставиться этот ярлык
то не ярлык, а просто файл без разшырения, размером 0 байт

Код:

[Files]
…………………………
Source: J:\ cleanup.cmd; DestDir: {app}; Flags: deleteafterinstall
………………………………

[Run]
Filename: {app}\ cleanup.cmd; WorkingDir: {app}; Flags: runhidden

Спасибо, помогло!

FlatX007 25-08-2008 22:03 883712

Как заставить компилятор выполнить после установки "основной" части - "-дополнительную", которая находиться в тойже папке например :

Setup.exe - "основная" часть - InnoSetup
Setup1.exe (запакованна в 7z + Sfx)- ''дополнительная'' часть1 например её размер 2 гига
Setup2.exe (запакованна в 7z + Sfx)- ''дополнительная'' часть2 например её размер 2 гига

Нужно:
Как решить проблему с путём установки ''дополнительных'' частей 1-2- нужно, что бы путь установился такой же какой я выбрал в начале установки в окне InnoSetup.
После распаковки "дополнительной" части2 вылезло стандартное окно InnoSetup о завершении установки.
При удалении программы (нажимаем на - unis000.exe) "дополнительная" часть удалилась тоже.

И возможно ли при распаковке "дополнительной" части1-2 (запакованна в 7z + Sfx) скрыть окно 7z - а процент распаковки отображался на полосе прогресса InnoSetup....

Вот такая задачка - заранее спасибо!
Если можно скрипт полностью ...

Котяра 25-08-2008 22:17 883728

Цитата:

Цитата FlatX007
И возможно ли при распаковке "дополнительной" части1-2 (запакованна в 7z + Sfx) скрыть окно 7z - а процент распаковки отображался на полосе прогресса InnoSetup.... »

Скрыть окно можно, а отобразить процент в InnoSetup - нет.

Serega 26-08-2008 00:34 883857

Цитата:

Цитата FlatX007
...путём установки ''дополнительных'' частей 1-2- нужно, что бы путь установился такой же какой я выбрал в начале установки в окне InnoSetup.

можно - установить архивы в папку с программой с последующим удалением архивов после распаковки
Цитата:

........................
[Files]
Source: D:\Setup.exe; DestDir: {app}; Flags: ignoreversion
Source: {src}\Setup1.exe; DestDir: {app}; Flags: ignoreversion external deleteafterinstall
Source: {src}\Setup2.exe; DestDir: {app}; Flags: ignoreversion external deleteafterinstall
.........................
[Run]
Filename: {app}\Setup1.exe; WorkingDir: {app}; Parameters: -y; StatusMsg: "Любое сообщение если надо..."; Flags: waituntilterminated skipifdoesntexist
Filename: {app}\Setup2.exe; WorkingDir: {app}; Parameters: -y; StatusMsg: "Любое сообщение если надо..."; Flags: waituntilterminated skipifdoesntexist
external - указывает, что файл внешний;
deleteafterinstall - устанавливать файл как обычно, но удалять его после завершения (или прервания) установки;
waituntilterminated - инсталлятор подождет, пока процесс полностью завершится (хотя он задан по умолчанию);
skipifdoesntexist - инсталлятор не выдаст сообщения об ошибке, если какой нибудь Setup1.exe и Setup2.exe не существует.
Цитата:

Цитата FlatX007
...при распаковке "дополнительной" части1-2 (запакованна в 7z + Sfx) скрыть окно 7z

можно, необходимо в секции [Run] поставить флаг runhidden для запуска в скрытом режиме, но я бы несоветовал. Будет распаковываться два архива по 2 Гига - это займет длительное время и пользователь может подумать о зависании компьютера, и какой шаг будет следующим? Естественно перезагрузка компьютера, при этом я думаю, пользователь будет нелестно отзываться о вашей программе.
Цитата:

Цитата FlatX007
...а процент распаковки отображался на полосе прогресса InnoSetup....

Котяра, правильно сказал - нельзя. Только использование окон распаковки самих 7z архивов.

FlatX007 26-08-2008 23:18 884604

Цитата:

Цитата Serega_
можно - установить архивы в папку с программой с последующим удалением архивов после распаковки »

а просто не удаляя можно ???

boss911 26-08-2008 23:36 884629

Цитата:

Цитата FlatX007
а просто не удаляя можно ??? »

Просто не указывайте флаг (Flags) 'deleteafterinstall'.

FlatX007 27-08-2008 00:18 884647

Вобщем всё работает но то что находиться внутри архива Setup1.exe и Setup2.exe остается после удаления программы ...
Как можно сделать что бы это всё удалялась вместе с программой ???

boss911 27-08-2008 00:46 884666

Цитата:

Цитата FlatX007
что бы это всё удалялась вместе с программой ??? »

Добавить в скрипт -
Код:

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


icestranger 31-08-2008 10:24 887630

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

Serega 31-08-2008 14:31 887780

Цитата:

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

Я не совсем понял ваш вопрос. Если вас интересует с каким ключом запустить инсталлятор из командной строки, чтоб он не перезагружал компьютер, то используйте /NORESTART - указывает инсталлятору не перезагружать систему, даже если это необходимо.
Если в самом скрипте, то просто не используйте в секции [Files] флаг - restartreplace.

FlatX007 31-08-2008 16:08 887835

Цитата:

Цитата Serega_
[Files]
Source: D:\Setup.exe; DestDir: {app}; Flags: ignoreversion
Source: {src}\Setup1.exe; DestDir: {app}; Flags: ignoreversion external deleteafterinstall
Source: {src}\Setup2.exe; DestDir: {app}; Flags: ignoreversion external deleteafterinstall
.........................
[Run]
Filename: {app}\Setup1.exe; WorkingDir: {app}; Parameters: -y; StatusMsg: "Любое сообщение если надо..."; Flags: waituntilterminated skipifdoesntexist
Filename: {app}\Setup2.exe; WorkingDir: {app}; Parameters: -y; StatusMsg: "Любое сообщение если надо..."; Flags: waituntilterminated skipifdoesntexist »


а если к примеру все архивы неуместились на один диск DVD (4.7)
если Setup1.exe распакуется, а Setup2.exe находиться на другом диске - запрос будет, что бы вставить другой диск ??? если нет то как это зделать ?

И немного тупой вопрос - как сменить картинку в окне инсталятора, и поставить задним планом (на весь размер экрана) любую свою картинку.

Тока с объяснениями... :help:

Serega 31-08-2008 17:22 887866

Цитата:

Цитата FlatX007
...архивы неуместились на один диск DVD (4.7)...

Ни разу не делал, но как записано в руководстве от Kindly:
Код:

[Setup]
;Разбиение на диски
DiskSpanning=yes
;Размер тома в байтах (здесь 695 мегабайт)
DiskSliceSize=730000000

т.е. если высчитать пропорцией на 4,7Гига, то получиться (4936690647), думаю надо округлить DiskSliceSize=4940000000
Цитата:

Цитата FlatX007
...- запрос будет, что бы вставить другой диск ??? ...

да
Цитата:

Цитата FlatX007
...как сменить картинку в окне инсталятора, и поставить задним планом (на весь размер экрана) любую свою картинку..

смена картинки
читать дальше »
Код:

[Setup]
WizardImageFile=путь до большой картинки\1.bmp
WizardSmallImageFile=путь до маленькой картинки\2.bmp

вставка фонового изображения
Цитата:

[Setup]
WindowVisible=yes
;и по желанию
WindowResizable=no

[Files]
Source: "C:\My_Image.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('My_Image.bmp'); //My_Image.bmp - указываемое изображение в секции [Files]
s:=ExpandConstant('{tmp}')+'\My_Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;
WindowVisible - позади окна мастера будет отображаться фоновое окно;
WindowResizable - при значении no пользователю не придется менять размеры фонового окна инсталлятора когда оно развернуто.

FlatX007 31-08-2008 22:19 888042

Чем распаковать и запаковать " *.bin - Inno Setup " от игры Сталкер ???

Проги: uni.extractor и Ultra ISO не предлагать !!!!

HUGO75 01-09-2008 02:12 888149

boss911 у вас получилось решить эту проблему?
Цитата:

Цитата boss911
как добитса того, чтоб инсталятор дожидался остановки батника, флаг waituntilidle непомогает »


boss911 01-09-2008 03:14 888157

Цитата:

Цитата HUGO75
у вас получилось решить эту проблему? »

Код:

Flags: waituntilterminated

HUGO75 01-09-2008 06:11 888169

boss911 спасибо, заработало ).

icestranger 01-09-2008 21:59 888821

Цитата:

Цитата Serega_
Если вас интересует с каким ключом запустить инсталлятор из командной строки, чтоб он не перезагружал компьютер, то используйте /NORESTART - указывает инсталлятору не перезагружать систему, даже если это необходимо. »

Вот это надо было мне, Спасибо

boss911 01-09-2008 23:17 888874

Цитата:

Цитата icestranger
Вот это надо было мне »

Все ключи для автоматической установки инсталляторов, сделанных с помощью InnoSetup, я выкладывал в посте #33.

zombie2003 02-09-2008 16:01 889337

Доброго времени суток.
Подскажите пожалуйста, может ли инсталлятор удалить сам себя?
Вот что я имею ввиду:
Есть инсталляционный пакет, он запускается 1 раз (из реестра, RunOnce) и после того как он отработает, желательно чтобы этого пакета не стало на жестком диске. Сможет ли сам инсталлятор сделать это или придется прибегать к помощи чего-то извне?
спасибо.

boss911 02-09-2008 20:49 889539

Цитата:

Цитата zombie2003
Подскажите пожалуйста, может ли инсталлятор удалить сам себя? »

Попробуйте это:
Код:

[Run]
Filename: {cmd}; Parameters: "/Q /C Ping 127.0.0.1 && Del /S /Q ""{srcexe}"""; Flags: postinstall nowait runhidden; Description: Удалить дистрибутив по окончании установки?

Но есть закавыка, дабы удаление не производилось во время запущенного инсталлятора, пришлось вынести на страницу завершения чекбокс с выбором вопроса удаления. Но, можно отключить эту страницу завершения ->
Код:

[Setup]
DisableFinishedPage=true


mariolast 03-09-2008 12:46 890006

Как добавить в скрипте в раздел [Registry] значение типа binary равное (пишу как в экспорте из реестра)

"SlowInfoCache"=hex:28,02,00,00,01,00,00,00,00,40,85,00,00,00,00,00,20,73,4d,\
c7,b7,0c,c9,01,05,00,00,00,43,00,3a,00,5c,00,49,00,6e,00,66,00,6f,00,74,00,\
65,00,63,00,5f,00,4c,00,74,00,64,00,5c,00,1f,04,1a,04,5f,00,11,04,1f,04,5c,\
00,42,00,6c,00,61,00,6e,00,6b,00,69,00,5f,00,50,00,53,00,2e,00,65,00,78,00,\
65,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00

А то в скрипте оно не влазит, что то не нашел как разделить его.

zombie2003 03-09-2008 14:46 890102

к сожалению отключить страницу завершения не могу(в смысле нужно чтобы она была).
я пишу в секции [ Code ] следующую строчку:
Код:

Exec(ExpandConstant('{cmd}'), '/Q /C Ping 127.0.0.1 && Del /S /Q ""{srcexe}"" && Pause', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
вот только в паскале я не силен(совсем не силен) и не могу сделать так чтобы cmd получил правильный путь и имя файла инсталятора.
я пытался туда прикрутить как-то ExpandConstant, но ничего у меня не вышло...

zombie2003 03-09-2008 15:20 890127

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

HUGO75 03-09-2008 16:39 890177

Подскажите пожалйста. Есть компонент Oracle в инсталяторе. Сам дистрибутив оракла находиться на сервере. Инсталятор должен запускать
Код:

[Run]
Filename: \\server\Oracle\Disk1\setup.exe; Parameters: -responseFile {tmp}\clientruntime_c.rsp -nowelcome; Components: mal\ora; Tasks: c; Flags: waituntilterminated runhidden

, но при таком раскладе как только запускается Оракл, то сразу завершаеться работа инсталятора. В дальнейшем будет добавлен параметр -silent. Как можно добиться чтоб инсталятор завершал работу после установки Оракла?

boss911 03-09-2008 17:32 890227

Цитата:

Цитата zombie2003
но чего я не учел, так это того что в этот момент файл инсталятора еще занят и не может быть уделан... »

О чем я и говорил:
Цитата:

Цитата boss911
дабы удаление не производилось во время запущенного инсталлятора, пришлось вынести на страницу завершения чекбокс с выбором вопроса удаления. »

Иначе вопрос можно было бы и не выносить на страницу завершения, то есть, убрать флаг postinstall.

С Паскалем я не дружу, но точно знаю, что вам нужно создать процедуру, которая бы выполнялась во время закрытия инсталлятора. Вот почему я использовал флаг postinstall.



Цитата:

Цитата HUGO75
но при таком раскладе как только запускается Оракл, то сразу завершаеться работа инсталятора. »

По сути, инсталлятор должен был дождаться остановки процесса setup.exe (флаг waituntilterminated). В момент установки Оракла процесс setup.exe запущен, есть в процессах?

HUGO75 03-09-2008 17:45 890234

Цитата:

Цитата boss911
В момент установки Оракла процесс setup.exe запущен, есть в процессах? »

да, setup.exe есть в процессах, а инсталятор стоит с кнопкой "завершить". Хотя окно установки Оракла еще не появилось, и если нажать кнопку "завершить", то сразу удаляеться файл {tmp}\clientruntime_c.rsp и начинаеться обычная установка Оракла. Насколько я понимаю...инсталятор просто вызвал \\server\Oracle\Disk1\setup.exe и посчитал, что на этом работа закончена ;).

boss911 03-09-2008 18:19 890262

Цитата:

Цитата HUGO75
инсталятор просто вызвал \\server\Oracle\Disk1\setup.exe и посчитал, что на этом работа закончена »

Не знаю, у меня все работает, к примеру:
Код:

[Run]
Filename: {app}\run.exe; Flags: waituntilterminated

Инсталлятор запускает приложение, ждет его остановки, после остановки переходит на страницу завершения (кнопка "завершить").

HUGO75 03-09-2008 20:38 890333

Цитата:

Цитата boss911
[Run]
Filename: {app}\run.exe; Flags: waituntilterminated »

это конечно будет работать потому, что run.exe находить внутри инсталятора. В моем случае командой вызываеться внешний интсалятор setup.exe. Наверно с этим и связано, что инсталятор не дожидаеться его завершения.

boss911 03-09-2008 23:04 890401

Цитата:

Цитата HUGO75
это конечно будет работать потому, что run.exe находить внутри инсталятора. »

Ну, это вы конечно и придумали. :)
Код:

[Run]
Filename: {sys}\calc.exe; Flags: waituntilterminated

Аналогично - все работает (дожидается остановки).

Решил проверить, запустил сторонний инсталлятор на шаре -
Код:

[Run]
Filename: \\Comp\PROGram\Setup.exe; Flags: waituntilterminated

Также все срабатывает, как и в первом варианте. Вы кстати это тоже можете проверить, только, запускайте установщик другого дистрибутива, ради эксперимента. Видимо тут проблема в установщике Оракла.

HUGO75 03-09-2008 23:46 890437

Цитата:

Цитата boss911
Ну, это вы конечно и придумали. »

ну я имел ввиду "локально". а вот на счет стороннего инсталлятора из шары я не подумал что то :). Завтра буду на работе, опять попробую. Спасибо за подсказку.

HUGO75 04-09-2008 19:46 891094

ПопробЫвал, действительно установщик дожидаеться установки других приложений запущенных из шар, даже без
Код:

Flags: waituntilterminated
А вот установки оракла дожидаться ни как не хочет :(.

HUGO75 04-09-2008 22:08 891216

вроде разобрался. setup.exe от Oracle передаёт параметры установки файлу javaw.exe и закрывается. Поэтому и завершается работа установщика. Можно тогда сделать так, чтоб установщик отследил когда завершится процесс javaw.exe и после этого уже завершил работу инсталятора? Или...Как запустить установку клиента оракла не через запуск Setup.exe, а через запуск javaw.exe?

boss911 04-09-2008 22:27 891239

Цитата:

Цитата HUGO75
даже без »

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

Цитата:

Цитата HUGO75
установки оракла дожидаться ни как не хочет »

Вы мне отвечали:
Цитата:

Цитата HUGO75
да, setup.exe есть в процессах, а инсталятор стоит с кнопкой »

Видимо установщик Оракла (setup.exe) перезагружается в момент его запуска или идет передача к другому процессу, возможно это происходит из-за его запуска с ключами командной строки, поробуйте запуск делать без них.

HUGO75 04-09-2008 22:40 891247

Цитата:

Цитата boss911
Вы мне отвечали:
Цитата HUGO75:да, setup.exe есть в процессах, а инсталятор стоит с кнопкой » »

Я ошибся, извиняюсь. Я видел что запускаеться setup.exe и успокаивался, закрывал диспетчер задач. Оказывается он запускался на несколько секунд, передавал параметры javaw.exe и закрывался.
Цитата:

Цитата boss911
Попробуйте сделать все то же самое, только без запуска с ключами командной строки: »

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

boss911 04-09-2008 23:16 891262

Цитата:

Цитата HUGO75
передавал параметры javaw.exe и закрывался. »

Стандартной функции слежения за процессами в IS нет, возможно, программисты на Паскале что-то и смогут придумать (код), но я от этого далек.

Можно попросить знатоков AutoIt, чтобы написали скрипт, который при запуске, будет передавать все ключи командной строки установщику Оракла (файл setup.exe), после чего, скрипт отлавливает на протяжении 10 секунд процесс javaw.exe, если такой процесс находится, то скрипт ждет его остановки. Пока скрипт ждет остановки процесса javaw.exe, инсталлятор ждет, когда остановится работа скрипта. Думаю, суть вы уловили.

HUGO75 05-09-2008 00:10 891294

ну вроде сделал в AutoIt
Код:

ProcessWaitClose("setup.exe")
ProcessWaitClose("javaw.exe")

чтоб не передавать параметры setup.exe. Просто боюсь, что потом не найду файл ответов, т.к. он {tmp}\clientruntime_c.rsp. Конечно с кодом на Паскале было б лучше...но и так работает :). ОГРОМНОЕ спасибо за помощь!

zombie2003 06-09-2008 19:32 892507

Подскажите, пожалуйста, может ли Inno останавливать службы?
Если да, то как?

boss911 06-09-2008 19:51 892521

Цитата:

Цитата zombie2003
может ли Inno останавливать службы? »

Остановить можно из командной строки:
Код:

net stop <имя_службы>

zombie2003 06-09-2008 23:36 892694

Цитата:

Цитата boss911
net stop <имя_службы> »

Спасибо, буду знать.
Хотя я немного поторопился с вопросом. :)
Утилита, которая удаляет службу сама ее и стопает. Тем не менее, спасибо еще раз. В будущем пригодится.

zombie2003 11-09-2008 12:52 896313

Подскажите, может ли Inno писать что-либо в файл?
В смысле есть текстовый файл, в нем есть строчка, в которой указывается путь. Путь должен изменяться в зависимости от того куда установлено ПО. Это возможно сделать только средствами Inno? Спасибо.

boss911 11-09-2008 17:23 896530

Цитата:

Цитата zombie2003
может ли Inno писать что-либо в файл? »

Во пример работы с INI файлом:
Код:

[INI]
Filename: {userappdata}\MyProg\MyFile.ini; Section: MySection; Key: MyLanguageFile; String: {app}\MyProg\Rus.lng


FlatX007 15-09-2008 17:36 900005

Вобщем например Есть игра со сделанным к ней модом v1.0 (всё это добро ставиться за обин раз инсталлятором)

В последующим к этой игре будет сделан ещё один мод v1.1 ... КАК сделать что бы установщик этого мода сам нащел ИМЕННО ЭТУ версию игры, без ввода пути установки?

И вот ещё как сделать верификацию папки установки - на предмет нахождения в ней файлов которые должны быть обязательно (проверка по имени, размеру)?

AlexNeo 16-09-2008 13:49 900672

Решил перепаковать Paint.Net в Inno Setup но не импортируются параметры реестра, не добавляется пункт в “Открыть с помощью”, если импортировать вручную то в “Открыть с помощью” всё появляется.

Скрипт :
читать дальше »
[Setup]
AppName=Paint.NET
AppVerName=Paint.NET 3.36
AppPublisherURL=http://www.getpaint.net/
AppSupportURL=http://www.getpaint.net/
AppUpdatesURL=http://www.getpaint.net/
DefaultDirName={pf}\Paint.NET
DefaultGroupName=Paint.NET
LicenseFile=.\Files\License.txt
OutputDir=.\
OutputBaseFilename=Setup
Compression=lzma/ultra
SolidCompression=true
InternalCompressLevel=ultra
CompressionThreads=2
VersionInfoVersion=3.36.0.0
VersionInfoTextVersion=3.36.0.0
AppVersion=3.36
UsePreviousAppDir=false
UsePreviousGroup=false
UninstallDisplayName=Paint.NET 3.36
VersionInfoDescription=Image and photo editing software written in C#.
VersionInfoCompany=dotPDN LLC
AppPublisher=dotPDN LLC
VersionInfoCopyright=Copyright © 2008 dotPDN LLC, Rick Brewster, Tom Jackson, and past contributors. Portions Copyright © Microsoft Corporation. All Rights Reserved.
AppCopyright=Copyright © 2008 dotPDN LLC, Rick Brewster, Tom Jackson, and past contributors. Portions Copyright © Microsoft Corporation. All Rights Reserved.

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: .\Files\PaintDotNet.exe; DestDir: {app}; Flags: ignoreversion
Source: .\Files\ICSharpCode.SharpZipLib.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\Interop.WIA.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\License.txt; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Base.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Core.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Data.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Effects.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.exe.config; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Resources.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.DE.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.ES.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.FR.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.it.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.JA.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.KO.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.PT-BR.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.RU.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.Strings.3.ZH-CN.resources; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.StylusReader.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PaintDotNet.SystemLayer.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PdnRepair.exe; DestDir: {app}; Flags: ignoreversion
Source: .\Files\PdnRepair.exe.config; DestDir: {app}; Flags: ignoreversion
Source: .\Files\SetupNgen.exe; DestDir: {app}; Flags: ignoreversion
Source: .\Files\SetupNgen.exe.config; DestDir: {app}; Flags: ignoreversion
Source: .\Files\ShellExtension_x64.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\ShellExtension_x86.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\Squish_x64.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\Squish_x86.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\Squish_x86_SSE2.dll; DestDir: {app}; Flags: ignoreversion
Source: .\Files\UpdateMonitor.exe; DestDir: {app}; Flags: ignoreversion
Source: .\Files\UpdateMonitor.exe.config; DestDir: {app}; Flags: ignoreversion
Source: .\Files\WiaProxy32.exe; DestDir: {app}; Flags: ignoreversion
Source: .\Files\WiaProxy32.exe.config; DestDir: {app}; Flags: ignoreversion
Source: .\Files\FileTypes\*; DestDir: {app}\FileTypes; Flags: ignoreversion recursesubdirs createallsubdirs
Source: .\Files\Resources\*; DestDir: {app}\Resources; Flags: ignoreversion recursesubdirs createallsubdirs
Source: .\System32\wiaaut.dll; DestDir: {sys}; Flags: ignoreversion

[Dirs]
Name: {app}\Effects

[Icons]
Name: {group}\Paint.NET; Filename: {app}\PaintDotNet.exe; WorkingDir: {app}; IconFilename: {app}\PaintDotNet.exe; IconIndex: 0
Name: {group}\{cm:UninstallProgram,Paint.NET}; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\Paint.NET; Filename: {app}\PaintDotNet.exe; Tasks: desktopicon; WorkingDir: {app}; IconFilename: {app}\PaintDotNet.exe; IconIndex: 0
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Paint.NET; Filename: {app}\PaintDotNet.exe; Tasks: quicklaunchicon; WorkingDir: {app}; IconFilename: {app}\PaintDotNet.exe; IconIndex: 0

[Run]
Filename: {app}\PaintDotNet.exe; Description: {cm:LaunchProgram,Paint.NET}; Flags: nowait postinstall skipifsilent; WorkingDir: {app}

[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\.bmp\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpe\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpeg\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpg\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.png\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKCR; SubKey: CLSID\{{D292F82A-50BE-4351-96CC-E86F3F8049DA}; ValueType: string; ValueData: Paint.NET Shell Extension; Flags: uninsdeletekey
Root: HKCR; SubKey: CLSID\{{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Apartment; Flags: uninsdeletekey
Root: HKCR; SubKey: CLSID\{{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32; ValueType: string; ValueData: {app}\ShellExtension_x86.dll; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\jpegfile\shell\edit\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.Picture\shell\edit\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\pngfile\shell\edit\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn; ValueType: string; ValueData: Paint.NET.1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn; ValueType: string; ValueName: PerceivedType; ValueData: Image; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn\ShellEx\{{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}; ValueType: string; ValueData: {{D292F82A-50BE-4351-96CC-E86F3F8049DA}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueName: Content Type; ValueData: image/targa; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueName: PerceivedType; ValueData: Image; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueData: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1; ValueType: string; ValueData: Paint.NET Image; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\edit\command; ValueType: string; ValueName: ; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\open\command; ValueType: string; ValueName: ; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\print\command; ValueType: string; ValueName: ; ValueData: "\""{app}\PaintDotNet.exe\"" \""print:%1\"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.ThumbExtract\CLSID; ValueType: string; ValueName: ; ValueData: {{D292F82A-50BE-4351-96CC-E86F3F8049DA}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.ThumbExtract\CurVer; ValueType: string; ValueName: ; ValueData: Paint.NET.ThumbExtract.1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.ThumbExtract.1\CLSID; ValueType: string; ValueName: ; ValueData: {{D292F82A-50BE-4351-96CC-E86F3F8049DA}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls; ValueType: dword; ValueName: {sys}\wiaaut.dll; ValueData: $00000002; Flags: uninsdeletevalue
Root: HKCR; SubKey: Applications\PaintDotNet.exe\shell\open\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletevalue
Root: HKCU; SubKey: Software\Classes\Applications\PaintDotNet.exe\shell\open\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\PaintDotNet.exe; ValueType: string; ValueData: {app}\PaintDotNet.exe; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\PaintDotNet.exe; ValueType: string; ValueName: Path; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}; ValueType: string; ValueData: VideoPreview Class; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\InprocServer32; ValueType: string; ValueName: ; ValueData: {sys}\wiaaut.dll; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Apartment; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\MiscStatus; ValueType: string; ValueName: ; ValueData: 0; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\MiscStatus\1; ValueType: string; ValueName: ; ValueData: 131473; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\ProgID; ValueType: string; ValueName: ; ValueData: WIA.VideoPreview.1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\ToolboxBitmap32; ValueType: string; ValueName: ; ValueData: {sys}\wiaaut.dll, 101; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\TypeLib; ValueType: string; ValueName: ; ValueData: {{94A0E92D-43C0-494E-AC29-FD45948A5221}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\Version; ValueType: string; ValueName: ; ValueData: 1.0; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\VersionIndependentProgID; ValueType: string; ValueName: ; ValueData: WIA.VideoPreview; Flags: uninsdeletekey


Рег Файл:
читать дальше »
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.bmp\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.jpe\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.jpeg\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.jpg\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.png\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_CLASSES_ROOT\CLSID\{D292F82A-50BE-4351-96CC-E86F3F8049DA}]
@="Paint.NET Shell Extension"

[HKEY_CLASSES_ROOT\CLSID\{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32]
"ThreadingModel"="Apartment"
@="C:\\Program Files\\Paint.NET\\ShellExtension_x86.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jpegfile\shell\edit\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.Picture\shell\edit\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pngfile\shell\edit\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdn]
@="Paint.NET.1"
"PerceivedType"="Image"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdn\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdn\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]
@="{D292F82A-50BE-4351-96CC-E86F3F8049DA}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tga]
"Content Type"="image/targa"
"PerceivedType"="Image"
@="Paint.NET.1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tga\OpenWithProgids]
"Paint.NET.1"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.1]
@="Paint.NET Image"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.1\shell\edit\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.1\shell\open\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.1\shell\print\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"print:%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.ThumbExtract\CLSID]
@="{D292F82A-50BE-4351-96CC-E86F3F8049DA}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.ThumbExtract\CurVer]
@="Paint.NET.ThumbExtract.1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Paint.NET.ThumbExtract.1\CLSID]
@="{D292F82A-50BE-4351-96CC-E86F3F8049DA}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls]
"C:\\WINDOWS\\system32\\wiaaut.dll"=dword:00000002

[HKEY_CLASSES_ROOT\Applications\PaintDotNet.exe\shell\open\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_CURRENT_USER\Software\Classes\Applications\PaintDotNet.exe\shell\open\command]
@="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\PaintDotNet.exe]
@="C:\\Program Files\\Paint.NET\\PaintDotNet.exe"
"Path"="C:\\Program Files\\Paint.NET"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}]
@="VideoPreview Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\Control]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\InprocServer32]
@="C:\\WINDOWS\\system32\\wiaaut.dll"
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\Insertable]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\MiscStatus]
@="0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\MiscStatus\1]
@="131473"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\ProgID]
@="WIA.VideoPreview.1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\Programmable]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\ToolboxBitmap32]
@="C:\\WINDOWS\\system32\\wiaaut.dll, 101"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\TypeLib]
@="{94A0E92D-43C0-494E-AC29-FD45948A5221}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\Version]
@="1.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B5F2CC8-5E1E-44F9-899B-3B789705AFCA}\VersionIndependentProgID]
@="WIA.VideoPreview"

Serega 20-09-2008 00:04 903764

AlexNeo, просмотрел ваш скрипт. Сильно разбираться не стал, в чём может быть не соответствие Рег Файла и секцией скрипта [Registry], но с начала я бы попробовал импортировать Рег Файл в скрипт не меняя полных путей, т.е С:\Program Files\Paint.NET\... и так далее.
Если в контекстном меню не появиться надпись, тогда попробуйте произвести регистрацию через *.cmd, с последующим удалением последних. Т.е. делаете, допустим Paint.NET.cmd, в котором записываете
Код:

cls
@echo off
REGEDIT /S Paint.NET.reg
EXIT

Затем сохраняете Paint.NET.reg и Paint.NET.cmd, чтоб в последствии не потерялись, в папку проекта программы, у вас насколько я понял это папка Files.
Я бы вам предложил немного сократить скрипт
Код:

............................
[Files]
Source: Files\*; Excludes: Paint.NET.reg, Paint.NET.cmd; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: System32\wiaaut.dll; DestDir: {sys}; Flags: onlyifdoesntexist
Source: Files\Paint.NET.reg; DestDir: {app}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist
Source: Files\Paint.NET.cmd; DestDir: {app}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist
............................

[Run]
Filename: {app}\Paint.NET.cmd; WorkingDir: {app}; Flags: runhidden waituntilterminated skipifdoesntexist
............................

Excludes - указывает какие файлы не копировать;
onlyifdoesntexist - устанавливать файл только в случае, если такого файла в системе пользователя нет;
deleteafterinstall - удалить файл после установки;
skipifsourcedoesntexist и skipifdoesntexist - не выводить сообщение об ошибке, если такого файла нет;
runhidden - запустится в скрытом окне.

P.S.
Да, чего-то я сразу не подумал. При регистрации через *.cmd, инсталлятор потеряет свою универсальность.

mariolast 23-09-2008 01:14 906212

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

boss911 23-09-2008 02:11 906234

Цитата:

Цитата mariolast
сделать так, чтобы была возможность выбора компонентов для установки? »

Код:

[Components]
Name: File1; Description: My File 1
Name: File2; Description: My File 2

[Files]
Source: C:\Program\MyProg1.exe; DestDir: {app}; Components: File1
Source: C:\Program\MyProg2.exe; DestDir: {app}; Components: File2

Если вам нужно, чтобы один из компонентов или все они были выбраны (стояла птичка) по умолчанию, тогда делаем так:
Код:

[Components]
Name: File1; Description: My File 1; Types: full custom
Name: File2; Description: My File 2

- означает, что компонент File1 будет выбран по умолчанию, все остальные - нет.

Junos 28-09-2008 09:35 910697

Чем распаковать inno setup 2.0.17?

Unpaker пишет:
Цитата:

Signature detected: Inno Setup Setup Data (2.0.17). This is not a supported vers
ion.

snark 01-10-2008 18:48 913509

Вложений: 1
Хотел создать в скрипте резервное копирование файлов. Скачал Примеры скриптов на паскале, нашел то что нужно:
Цитата:

Этот метод резервирования заключается в том, что, например, при создании обновления, нам необходимо зарезервировать все перезаписываемые файлы, например, в папку Backup с сохранением их расположения в подпапках. Затем при деинсталляции обновления мы восстанавливаем резервные файлы на место и удаляем уже не нужную папку Backup. Для данной работы необходим установленный Inno Setup Preprocessor, доступный при установке пакета Inno Setup QuickStart Pack с официального сайта Inno Setup. Итак, для работы нам необходим внешний SHFileOperation.iss, который помещаем в одну папку с Inno Setup. СКРИПТ ИМЕЕТСЯ В КОМПЛЕКТЕ. Затем создаем новый скрипт следующего содержания
Скрипт SHFileOperation.iss поместил в папку со своим скриптом. При компиляции вываливается ошибка:



файл SHFileOperation.iss прикрепил.
Inno Setup Preprocessor, Inno Setup QuickStart Pack установлены.

snark 03-10-2008 11:00 914863

Решена загвоздка в предыдущем посте!
Оказалось что проблема была вот в чем: я дважды прописал строку
Код:

#include "SHFileOperation.iss"
в начале скрипта и в секции [code]. Из последней эту строку надо было удалить. :)

Resylenr 04-10-2008 19:36 915793

У меня такаеже проблемма как у AlexNeo, помогите ктонибудь решить!

Serega 04-10-2008 23:22 915966

Цитата:

Цитата Resylenr
У меня такаеже проблемма как у AlexNeo, помогите ктонибудь решить!

Я конечно не специалист, но попробуйте добавить двойной \\ в скрипт, т.е. пример из скрипта AlexNeo
читать дальше »
Код:

Root: HKCR; SubKey: CLSID\{{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32; ValueType: string; ValueData: {app}\ShellExtension_x86.dll; Flags: uninsdeletekey
соответствующий ключ реестра, из рег файла AlexNeo
Код:

[HKEY_CLASSES_ROOT\CLSID\{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32]
"ThreadingModel"="Apartment"
@="C:\\Program Files\\Paint.NET\\ShellExtension_x86.dll"

мне кажется, нужно написать в скрипте так
Код:

Root: HKCR; SubKey: CLSID\{{D292F82A-50BE-4351-96CC-E86F3F8049DA}\InProcServer32; ValueType: string; ValueData: {app}\\ShellExtension_x86.dll; Flags: uninsdeletekey
и так далее, в соответствии с рег файлом. Проверить не на чем, но думаю должно работать...

Serega 05-10-2008 13:36 916260

Цитата:

Цитата Junos
Чем распаковать inno setup 2.0.17? »

По-моему самый первый: Inno Setup Unpacker v0.04 (2004.02.27) Supports IS versions 4.0.1 - 4.1.8.
Так, что мне кажется самый простой вариант, это произвести установку на виртуальной машине, проследив изменения с помощью RegShot.

Resylenr 07-10-2008 13:51 917874

Serega
Непомагло!
Помагите очень надо.

hb860 07-10-2008 15:31 917950

Resylenr, А что распаковываешь ?

Resylenr 07-10-2008 16:41 918012

Пытаюсь пережать Adobe Photoshop CS3 в Inno Setup, но не как не могу добавить ярлык в контекстное меню проводника.

hb860 07-10-2008 18:41 918119

Кинь код который регистрирует контекстное меню

Serega 07-10-2008 18:53 918126

Цитата:

Цитата Resylenr
Непомагло! »

сказать честно - не знаю почему. Попробуйте в самом рег файле заменить C:\Program Files на переменную %PROGRAMFILES%, а C:\WINDOWS на %WINDIR% - это придаст универсальность рег файлу. Произведите регистрацию рег файла через запуск *.cmd из инсталлятора.

Resylenr 07-10-2008 19:00 918132

Если импортировать рег файл то всё ОК! А если через инсталлятор то не работает.

hb860 07-10-2008 19:08 918141

Resylenr, хочу видеть код

Resylenr 07-10-2008 19:14 918148

Возми код от AlexNeo у меня такойже.

hb860 07-10-2008 19:58 918181

Надо прописать в скрипте что-то подобное. В моем случае это добавляет оперу :)
Код:

[Registry]
Key:HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp\OpenWithList; ValueType: string;ValueName a;ValueData: Opera.exe;  Flags: uninsdeletevalue


Serega 08-10-2008 01:31 918421

Resylenr, разобрался в чём дело и нашёл ошибку. Правда, прежде пришлось самому пересобрать программу
Код:

Root: HKLM; SubKey: SOFTWARE\Classes\jpegfile\shell\edit\command; ValueType: string; ValueData: "\""{app}\PaintDotNet.exe\"" \""%1\"""; Flags: uninsdeletevalue
должно быть, так:
Код:

Root: HKLM; SubKey: SOFTWARE\Classes\jpegfile\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletevalue
исправьте все строки в соответствии с этим и будет у вас счастье...
P.S.
Если интересно, я вношу в реестр немного другие изменения, вот мой пример скрипта
читать дальше »
[Setup]
AppName=Paint.NET
AppVerName=Paint.NET 3.36
VersionInfoVersion=3.36
AppPublisher=dotPDN LLC
AppPublisherURL=http://www.getpaint.net
AppSupportURL=http://www.getpaint.net
AppUpdatesURL=http://www.getpaint.net
DefaultDirName={pf}\Paint.NET
UninstallFilesDir={app}\Uninstall
DefaultGroupName=Paint.NET
AllowNoIcons=yes
ChangesAssociations=yes
InfoBeforeFile=Paint.NET\License.txt
OutputDir=D:\Мои сборки
OutputBaseFilename=Paint.NET
SetupIconFile=C:\Program Files\Иконки\41.ico
UninstallDisplayIcon={app}\PaintDotNet.exe
Compression=lzma
SolidCompression=yes

[Languages]
Name: russian; 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

[Files]
Source: Paint.NET\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Sys32\wiaaut.dll; DestDir: {sys}; Flags: onlyifdoesntexist regserver sharedfile

[Icons]
Name: {commonprograms}\Стандартные\Paint.NET; Filename: {app}\PaintDotNet.exe; WorkingDir: {app}; Comment: Бесплатный графический редактор Paint.NET 3.36
Name: {commondesktop}\Paint.NET; Filename: {app}\PaintDotNet.exe; WorkingDir: {app}; Comment: Бесплатный графический редактор Paint.NET 3.36; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Paint.NET; Filename: {app}\PaintDotNet.exe; WorkingDir: {app}; Comment: Бесплатный графический редактор Paint.NET 3.36; Tasks: quicklaunchicon

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

[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\.bmp\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpe\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpeg\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.jpg\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn; ValueType: string; ValueName: ; ValueData: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn; ValueType: string; ValueName: PerceivedType; ValueData: Image; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.pdn\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.png\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueName: Content Type; ValueData: image/targa; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueName: PerceivedType; ValueData: Image; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga; ValueType: string; ValueName: ; ValueData: Paint.NET.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\.tga\OpenWithProgids; ValueType: string; ValueName: Paint.NET.1; ValueData: ; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Classes\Applications\PaintDotNet.exe\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Applications\PaintDotNet.exe\shell\open\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Applications\PaintDotNet.exe\shell\print\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""print:%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\jpegfile\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1; ValueType: string; ValueName: ; ValueData: Paint.NET Image; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\open\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.NET.1\shell\print\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""print:%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\Paint.Picture\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Classes\pngfile\shell\edit\command; ValueType: string; ValueData: """{app}\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: CHECKFORUPDATES; ValueData: 1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: TGAEDITOR; ValueData: 1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: JPGPNGBMPEDITOR; ValueData: 1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: TARGETDIR; ValueData: {app}\; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: USINGWIZARD; ValueData: 1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: LASTACCEPTEDEULAVERSION; ValueData: 20080601; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: PDNUPDATING; ValueData: 0; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: SKIPCLEANUP; ValueData: 0; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: QUEUENGEN; ValueData: 1; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Paint.NET; ValueType: string; ValueName: LanguageName; ValueData: ru-RU; Flags: uninsdeletekey

Саш_ОК 08-10-2008 23:16 919249

Ребята а скажите как можно убрать строку в инсталяторе --ту которая показывает куда устанавливается программа??

Пусть прогрес бар быдет а вот там де пишет Ц/ПрограмзФайл/бла-бла-бла -КАК убрать можно???
Спасибо зарание за ответы.

Resylenr 09-10-2008 12:20 919550

Serega_ ,
Спасибо все заработало.

Serega 12-10-2008 11:43 921674

Цитата:

Цитата Саш_ОК
Ребята а скажите как можно убрать строку в инсталяторе... »

в скрипте надо написать:
..........................................................................
[code]
procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
end;
..........................................................................
Это отключит отображение файлов вообще.

Алексей Н. 12-10-2008 15:31 921804

Подскажите, можно ли из командной строки запретить создание ярлыка на рабочем столе?
Пробую с ключом /noicons, но не работает. Это вроде ключ для ярлыков меню "пуск", но он и там не работает. Пробовал создавать файл ответов, но он получается какой-то слишком урезанный.

Код:

[Setup]  Lang=ru  Dir=C:\Program Files\LanTricks\LanScope  Group=LanTricks  NoIcons=0  Components=
Если конкретно, то пытаюсь тихо установить LanScope 2.9.1. Но и с другими приложениями такие же проблемы.

snark 12-10-2008 17:21 921863

Так вы использовали файл ответов?
Код:

setup.exe /LOADINF="config.txt" /VERYSILENT
что-то вроде такого. Для начала создаете файл ответов командой
Код:

/SAVEINF="config.txt"
где config.txt - имя файла ответов. Кавычки не обязательны, но нужны, если в имени файла есть пробелы.

Serega 12-10-2008 20:53 922013

Цитата:

Цитата Алексей Н.
Подскажите, можно ли из командной строки запретить создание ярлыка на рабочем столе?
Пробую с ключом /noicons, но не работает. Это вроде ключ для ярлыков меню "пуск", но он и там не работает. Пробовал создавать файл ответов, но он получается какой-то слишком урезанный. »

Всё правильно /noicons, это команда не создавать ярлыков, но в данном инсталляторе это не предусмотрено, т.е. такого права пользователю не предоставляется.
По поводу файла ответов, сказать честно, у меня так и ни разу не получилось, правда пробовал всего пару раз, но мне это показалась таким гемором.
На мой взгляд, самый простой вариант - распаковать инсталлятор, изменить скрипт по вашему усмотрению и желанию, затем снова его скомпилировать.
P.S.
А вообще, прикольная программка...

Алексей Н. 13-10-2008 12:14 922510

Понятно. Спасибо.

alex_84 13-10-2008 17:32 922799

есть небольшая проблема с установкой PC Tools Firewall Plus и PC Tools Antivirus. Начиная с 3-й версии, в фаерволл включили дполнительную установку (путем загрузки из инета) Google Toolbar, которая некоторым людям (например мне =) ) совершенно не нужен. Можно как-нибудь обойти установку этого компонента? Установка с ключем /Verysilent /Norestart конечно проходит успешно, но перед самой установкой появляется окошко загрузки того самого гугла тулбара, что требует помимо нажатия кнопочек еще и выхода в инет (а откуда он у меня, когда установка всего софта начинается за 12 минут до окончания установки винды?). После отмены загрузки компонента, установка фаервола проходит в тихом режиме. Вопрос в том - как пропустить загрузку ненужного мне компонента? Распаковщика под Inno Setup 5.2.2 я еще не встречал, а то можно было бы и самому поковыряться. Заранее благодарен.

Serega 13-10-2008 18:10 922829

Цитата:

Цитата alex_84
Распаковщика под Inno Setup 5.2.2 я еще не встречал... »

посмотрите в шапку темы Unpaker 2.0, Зеркало, зеркало - распаковывает инсталляторы версии 5.2.2 или вот по этой ссылке - распаковывает инсталляторы версии 5.2.3, а здесь - расширенная версия Version 0.23 build 2008-08-08 (китайская модификация), как про неё написано:
Цитата:

Данная сборка обладает расширенной функциональностью по сравнению с оригинальным innounp, корректно распознает различные версии и модификации инсталляторов Inno Setup, поддерживает дополнительные ключи, которые повышают вероятность корректной распаковки в сложных случаях
и в работе с запароленными инсталляторами..
P.S.
Да, вот ещё Inno Setup Unpacker Explorer - русская версия. Это графическая оболочка для innounp.

alex_84 13-10-2008 18:59 922874

Цитата:

Цитата Serega_
посмотрите в шапку темы Unpaker 2.0, Зеркало, зеркало - распаковывает инсталляторы версии 5.2.2 или вот по этой ссылке - распаковывает инсталляторы версии 5.2.3, а здесь - расширенная версия Version 0.23 build 2008-08-08 (китайская модификация), как про неё написано: »

отлично, огромное спасибо. Помогло =)

SamLab 13-10-2008 20:26 922964

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

Serega 13-10-2008 20:42 922985

Цитата:

Цитата SamLab
Каким ключом можно убрать галочку и тем самым не запускать программу по окончании установки? »

может я конечно и заблуждаюсь, но мне кажется, что никого ключа для этого нет. Способы решения:
1. Пересобрать инсталлятор;
2. Убить процесс запуска. Как написано в
Цитата:

Цитата Учебник по автоматической установке Windows
Осталась еще одна проблема. Некоторые инсталляторы Inno Setup попытаются запустить программу по окончании установки. ISOBuster как раз такой случай. Тогда приходится убивать процесс, используя встроенную в Windows утилиту Taskkill. Ниже пример кода для установки ISOBuster:

ECHO.
ECHO Installing ISOBuster 1.4
ECHO Please wait...
start /wait %systemdrive%\install\Applications\ISOBuster\IsoBuster14.exe /VERYSILENT /SP-
ECHO.
ECHO Killing ISOBuster.exe process

taskkill.exe /F /IM isobuster.exe
ECHO .

но первый вариант, мне всегда больше нравится...

SamLab 13-10-2008 21:51 923065

Serega_, Через бат файл решается просто я знаю, но мне желательно чтобы не используя батников только через параметры командной строки

Serega 13-10-2008 21:58 923074

Цитата:

Цитата SamLab
...но мне желательно чтобы не используя батников только через параметры командной строки »

у меня один раз было такое, перепробовал все возможные команды, ничего не вышло... Распаковать инсталлятор не смог, зашифрован, пришлось на виртуальной машине устанавливать и потом пересоберать инсталлятор.
P.S.
А, что за программа?

Алексей Н. 13-10-2008 22:25 923101

SamLab,
Обычно решается через создание файла ответов. Установка с ключом /saveinf="xxxxxxx.inf", а потом тихая установка с ключом /loadinf="xxxxxxx.inf". Устанавливаю так K-lite кодеки. Но прокатывает как оказалось не всегда.

boss911 14-10-2008 00:41 923191

Цитата:

Цитата SamLab
Каким ключом можно убрать галочку и тем самым не запускать программу по окончании установки? »

Цитата:

Цитата Алексей Н.
Обычно решается через создание файла ответов. »


Если автор инсталлятора не указал в скрипте флаг 'skipifsilent', то и файл ответов может не помочь, и ключи командной строки тоже, их нет.

Код:

[Run]
Filename: {app}\MyProg.exe; Description: Запустить MyProg; Flags: postinstall skipifsilent


Dimika 14-10-2008 19:17 923854

Привет!

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

katok888 14-10-2008 21:32 923990

Dimika,
Код:

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent


FlatX007 24-10-2008 19:16 932714

Подскажите как зделать, что бы при запуске установки в пути установки были показанны только Flash устройства!!
Если Флешек нет то желательно, что-бы вылезло окошко с предупреждением.


*****

И помогите переделать этот скрипт суть его заключается в этом - (Проверка на присутствие и целостность определенного файла, находящего рядом с инсталлятором)


Можно зделать так, что бы инсталятор проверял MD5 не одного файла, а группы файлов!
...пробовал дописывать ещё несколько строк - при компиляции ошибки не выдаёт но работает проверка MD5 только на один файл.

читать дальше »
[code]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
MD5,ResultStr:string;
hWnd: Integer;
begin
Result:=True;
if not FileExists(ExpandConstant('{src}')+'\Kindly.nfo') then
begin
MsgBox('"Kindly.nfo" is not found in one dir with installer.'#13#13'Please place "Kindly.nfo" and run installer again.', mbError, mb_OK);
Result:= False;
end
else
begin
MD5 := GetMD5OfFile(ExpandConstant('{src}\Kindly.nfo'));
If not (MD5 = 'cee34d7975e3e97c6a8f50fe7276a8de') then
begin
MsgBox('MD5 hash of "Kindly.nfo" is not valid.'#13#13'You are probably using web shit!'#13#13'I''m closed now, bye-bye:).', mbCriticalError, mb_OK);
Result:=False;
end;
end;
end;



*****

Gennadich 29-10-2008 16:54 937172

Товарищи! Подскажите, как сделать чтобы предотвратить одновременный запуск нескольких экземпляров сетапа?

Merlin_jr 10-11-2008 00:36 948163

Приветствую Знающих.

Подскажите как убрать из заголовка инсталлятора следующий фрагмент "Установка - ".

boss911 10-11-2008 01:52 948212

Цитата:

Цитата Merlin_jr
Подскажите как убрать из заголовка инсталлятора следующий фрагмент "Установка - ". »

Отредактируйте языковой файл Languages\*.isl , исходя из вашего языка, секцию [Messages], там разберетесь.

Также, можно пойти более красивым методом. Создайте в скрипте (.iss) следующие:
Код:

[Messages]
SetupWindowTitle=%1

%1 - подставится значение из секции [Setup] парметра AppName.

Если вы используете языковой файл для интерфейса инсталлятора, к примеру, русский, тогда сделайте так:
Код:

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

[Messages]
rus.SetupWindowTitle=%1


Merlin_jr 10-11-2008 15:06 948636

А какой переменной можно заменить текст на значке приложения в Панели задач

Спасибо уже не не надо. Сам нашел.

FlatX007 10-11-2008 17:06 948743

Цитата:

Цитата FlatX007
Подскажите как зделать, что бы при запуске установки в пути установки были показанны только Flash устройства!!
Если Флешек нет то желательно, что-бы вылезло окошко с предупреждением.
*****
И помогите переделать этот скрипт суть его заключается в этом - (Проверка на присутствие и целостность определенного файла, находящего рядом с инсталлятором)
Можно зделать так, что бы инсталятор проверял MD5 не одного файла, а группы файлов....
читать дальше » »

Ну чего никто незнает ???

Мда - как из готовых скриптов ответы брать , это все горазды ... а понастоящему помочь некому :(

МИШАНЧИК 14-11-2008 12:41 952474

Подскажите пожалуйста!
Пытаюсь установить руссификатор для JetAudio 7.1.8. Он собран при помощи Inno Setup. Но при запуске с ключом /VERYSILENT выскакивает окно "Определено местоположение JetAudio. Продолжить установку. Да. Нет."
При запуске с ключом /VERYSILENT /SP- картина та же.
Как правильно его тихо установить?

ZaV 14-11-2008 16:02 952657

Цитата:

Цитата МИШАНЧИК
Пытаюсь установить руссификатор для JetAudio 7.1.8. »

не знаю о какой версии говорите вы но на офф сайте я нашел только Install_RUS_V71_LPack_v101_(1).exe
он сделан в NSIS.

МИШАНЧИК 15-11-2008 02:26 953137

ZaV, у меня Install_RUS_V71_LPACK_V120.

А по Вашей ссылке, так там вообще есть Install_RUS_V71_LPACK_V121_(2) вот он такой же как у меня Install_RUS_V71_LPACK_V120 собран в Inno.

Serega 15-11-2008 19:52 953586

Цитата:

Цитата FlatX007
а понастоящему помочь некому »

FlatX007, будьте немного уважительнее, к тем кто здесь присутствует. Если Вам не ответили на Вашу проблему - это не значит, что Вас никто не заметил, в полне возможно просто нет готового решения по Вашей проблеме...
Если Вас устроит ответ, по решению Вашей проблемы: Я НЕ ЗНАЮ...
Ну как, полегчало???
Цитата:

Цитата FlatX007
Мда - как из готовых скриптов ответы брать , это все горазды ... »

но все так или иначе ответы строятся на том, что когда-то, кем-то написано, просто нужно уметь найти решение своей проблемы в нужном месте и в нужной книге...
Мне просто интересно... И как Вы думаете после такого, Вам кто-то поможет??? Не пльюйте в колодец из которого пьёте...
Цитата:

Цитата МИШАНЧИК
Как правильно его тихо установить? »

Моё мнение, спасёт только переупаковка...

FlatX007 16-11-2008 23:15 954453

Отвечаю сам на свой вопрос !

Скрипт для проверки контрольной суммы и наличия 2х файлов (я не успел попробовать но думаю проверка 2х файлов это не предел)

Код:

function NextButtonClick(CurPage: Integer): Boolean;
var
  sz:Integer;
  s:string;
    begin
  Result:=True;
 If CurPage=6 then
 //Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
  begin
 If (FileSearch('Main.exe', ExpandConstant('{app}'))='')
 or (FileSearch('Comp.dll', ExpandConstant('{app}')+'\data')='')
then
  begin
  s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
  MsgBox(s, mbError, mb_Ok);
  Result:= False
end
else
 //И проверка размера оригинальных файлов
  begin
 If FileSize(ExpandConstant('{app}')+'\Main.exe', sz)
then
  begin
 If sz<>270336 //Проверяемый размер в байтах
then
  begin
  s:='Размер установленого компонента Main.exe не соответствует.' #13#13 'Для установки обновления требуются оригинальные файлы.';  MsgBox(s, mbCriticalError, mb_Ok);
  Result:= False
  end else
  begin
 If FileSize(ExpandConstant('{app}')+'\data\Comp.dll', sz)
then
  begin
 If sz<>3688328
then
  begin
  s:='Размер установленого компонента Comp.dll не соответствует.' #13#13 ' Для установки обновления требуются оригинальные файлы.';  MsgBox(s, mbCriticalError, mb_Ok);
  Result:= False
end;
end;
end;
end;
end;
end;
end;


ZaV 17-11-2008 13:14 954815

МИШАНЧИК,
самое простое, что приходит в голову по поводу установки русификатора .. это распаковать скрипт
и откомпилировать заново. Так заодно мы потеряем секцию code из которой по всей видимости и растут ноги у этого окна.

МИШАНЧИК 18-11-2008 10:09 955686

ZaV, а не могли бы Вы
Цитата:

Цитата ZaV
распаковать скрипт и откомпилировать заново »

если позволяет время это сделать и выложить руссификатор, или скрипт?

ZaV 18-11-2008 11:50 955789

Вложений: 1
МИШАНЧИК, примерно такой скрипт получается

andreichsb 19-11-2008 20:23 957366

Ребят, мало что понимаю в языках программирования, подскажите как сделать так что бы инсталятор созданный в инно сетап сам искал есть ли на компьютере директория для установки ( по умолчанию она должна быть, так как добавляю новые карты к игре) и ставилось все в найденную диру? спасибо заранее большое.

Serega 19-11-2008 22:27 957480

Цитата:

Цитата andreichsb
... сам искал есть ли на компьютере директория для установки ( по умолчанию она должна быть, так как добавляю новые карты к игре) и ставилось все в найденную диру?... »

Нужно в секции [Setup] записать путь установки так:
читать дальше »
Код:

DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1,InstallPath}
также можно добавить проверку в секцию [code]:
Код:

function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
  s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1')
 then
begin
 MsgBox('Программа My Program 1.5 не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
 Result:=False;
end;
end;


andreichsb 20-11-2008 09:46 957849

сделал как в первом коде, инсталятор пытается пытается создать папку с таким названием как та куда нужно установить т.е. должно быть так d/program files/activision/call of duty 4/main
а делает так d/program files/activision/call of duty 4/call of duty 4/main

Serega 20-11-2008 17:14 958241

Цитата:

Цитата andreichsb
а делает так d/program files/activision/call of duty 4/call of duty 4/main »

А можно взглянуть на сам скрипт?

andreichsb 20-11-2008 17:30 958254

Код:

; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!  [Setup] AppName=MapPackSB v1.1 AppVerName=Version 1.1 AppPublisher=Clan SB [X7] AppPublisherURL=http://www.callofduty5.sbor.net/ AppSupportURL=http://www.callofduty5.sbor.net/ AppUpdatesURL=http://www.callofduty5.sbor.net/ DefaultDirName={reg:HKLM\SOFTWARE\Activision\Call of Duty 4 - Modern Warfare_is1,InstallPath} DefaultGroupName=MapPackSB DisableProgramGroupPage=yes LicenseFile=F:\карты\Лицензия.txt OutputDir=E:\карты OutputBaseFilename=MapPackSB SetupIconFile=D:\Program Files\Activision\Call of Duty 4 - Modern Warfare\cod4.ico Compression=lzma SolidCompression=yes  [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"  [Files] Source: "D:\Program Files\Activision\Call of Duty 4 - Modern Warfare\Server SB.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\карты\Call of Duty 4 - Modern Warfare\main\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "F:\карты\Call of Duty 4 - Modern Warfare\zone\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "F:\карты\Call of Duty 4 - Modern Warfare\pb\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files  [Icons] Name: "{group}\{cm:ProgramOnTheWeb,MapPackSB}"; Filename: "http://www.callofduty5.sbor.net/"

Саш_ОК 20-11-2008 18:12 958306

Ребята а подскажите скриптик для того что б не появлялось во время установки окно с предложением вибора директории!!!
Спасибо зарание!

boss911 20-11-2008 18:24 958314

Цитата:

Цитата Саш_ОК
что б не появлялось во время установки окно с предложением вибора директории »

Код:

[Setup]
DisableDirPage=true


Aurochs 20-11-2008 18:25 958316

Товарищи что лучше сжимает точно lzma/iltra64 или может lzma/max ?
просветите нуба пожалуйста

Serega 20-11-2008 18:28 958319

andreichsb, Вообще я вам писал совсем другой ключ, ну да ладно...
Я понял о чём речь, запишите так:
читать дальше »
Код:

[Setup]
.....................................................
DefaultDirName={reg:HKLM\SOFTWARE\Activision\Call of Duty 4 - Modern Warfare,InstallDir}
.....................................................


Serega 20-11-2008 18:43 958328

Цитата:

Цитата Aurochs
Товарищи что лучше сжимает точно lzma/iltra64 или может lzma/max ? [post=ID]»[/post]

lzma/ultra сжимает лучше...

Aurochs 20-11-2008 18:52 958337

спасибо.

Akella2007 25-11-2008 13:45 963074

Кусок скрипта для перевода дистрибудива на русский язык:
Тынц

workermaks 27-11-2008 11:50 965036

Господа, подскажите - можно ли в Inno setup вызывать модальное окно для сбора параметров а потом с этими параметрами сделать RUN exe файла? :shout:

Resylenr 28-11-2008 15:52 966372

Пытаюсь пережать Adobe Photoshop CS3 в Inno Setup, но не как не могу добавить ярлык в контекстное меню проводника.

Откликнитесь кто нибудь

Serega 28-11-2008 16:31 966401

Цитата:

Цитата Resylenr
Пытаюсь пережать Adobe Photoshop CS3 в Inno Setup, но не как не могу добавить ярлык в контекстное меню проводника. »

У меня нет Adobe Photoshop, но я заглянул к себе в реестр и в [HKEY_CLASSES_ROOT\ACDSee 10.0.032], увидел следующее:
читать дальше »

[HKEY_CLASSES_ROOT\ACDSee 10.0.032]
@="ACDSee 10.0 RAW изображение"

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\DefaultIcon]
@="c:\\program files\\acd systems\\acdsee\\10.0\\plugins\\ID_DCRaw.apl,0"

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\shell]
@="Open"

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\shell\ACDEdit]
@="Редактировать в ACDSee 10 Photo Manager"

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\shell\ACDEdit\command]
@="\"C:\\Program Files\\ACD Systems\\ACDSee\\10.0\\ACDSeeQV10.exe\" /ee \"%1\""

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\shell\Open]
@="Открыть с помощью ACDSee 10 Photo Manager"

[HKEY_CLASSES_ROOT\ACDSee 10.0.032\shell\Open\command]
@="\"C:\\Program Files\\ACD Systems\\ACDSee\\10.0\\ACDSeeQV10.exe\" \"%1\""

Можете сделать по аналогии...

ChVL 03-12-2008 21:51 971597

Имеются два файла: file32.dll и file64.dll, один из них соответственно надо отправить в директорию при x32, другой – при x64. Использую флаги:
Flags: regserver noregerror onlyifdoesntexist 32bit и
Flags: regserver noregerror onlyifdoesntexist 64bit
При инсталляции выскакивает окно:
«Внутренняя ошибка: Cannot install files to 64-bit locations on this version of Windows»
и установка прерывается. Флаги 32bit и 64bit в какой только комбинации не пристёгивал - ноль реакции.
Добавляю Check-функцию:
Код:

[_Files]
Source: "file32.dll" ; DestDir: "{pf}";  Flags: regserver noregerror onlyifdoesntexist; Check: (not IsWin64);
Source: "file64.dll" ; DestDir: "{pf}";  Flags: regserver noregerror onlyifdoesntexist; Check: IsWin64;
 
[_Code]
function IsWin64: boolean;
begin
 if IsWin64 then 
 begin
  MsgBox('64-bit program files reside in: ' +  ExpandConstant('{pf}'), mbInformation,  MB_OK); 
 Result:=True;
 end
 else
  begin
  MsgBox('32-bit program files reside in: ' +  ExpandConstant('{pf}'), mbInformation,  MB_OK); 
  Result:=False;
  end;
end;

Инсталляция намертво зависает.
Что я делаю не так?

ChVL 04-12-2008 16:46 972300

C помощью добрых людей решение найдено. Нельзя называть свою функцию тем же именем IsWin64. Правильный вариант должен быть таким (может кому-то пригодится):
Код:

[_Files]
Source: "file32.dll" ; DestDir: "{pf}";  Flags: regserver noregerror onlyifdoesntexist; Check: (not IsX64);
Source: "file64.dll" ; DestDir: "{pf}";  Flags: regserver noregerror onlyifdoesntexist; Check: IsX64;
 
[_Code]
function IsX64: boolean;
begin
 if IsWin64 then 
 begin
  MsgBox('64-bit program files reside in: ' +  ExpandConstant('{pf}'), mbInformation,  MB_OK); 
 Result:=True;
 end
 else
  begin
  MsgBox('32-bit program files reside in: ' +  ExpandConstant('{pf}'), mbInformation,  MB_OK); 
  Result:=False;
  end;

Если окна не нужны, то строчки MsgBox просто убрать.

Саш_ОК 07-12-2008 22:51 974988

Ребята скажите -вот есть двет проблеми -помогите решить!

1 как зделать так что б параметр Flags: exclusive біл в обеих позициях!

Код:

Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: exclusive
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

2 создаю инстайлер - в нём есть фали которие кидаются в папку систем32 а есть файли и папки которие кидаются в Ц/Програм Файлз ... но есть проблема -когда изменяю дирректорию установки -файли кидаются в нужную деррикторию а вот папки нет!
Что делать????
Код:

[Files]
Source: "J:\Instal\MyProg.apm"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\MyProg.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\autorun.inf"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\bottom.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\data_index.js"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\index.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\main.hta"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\navigation.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\navigation.js"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\partners.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\MyProg.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\Price.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\right.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\search.js"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\settings.js"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\style.css"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\userguide.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\MyProg.apm"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "J:\Instal\printButton.png"; DestDir: "C:/WINDOWS/system32/"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "J:\Instal\Adobe_Reader\*"; DestDir: "C:\Program Files\MyProg\Adobe_Reader"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "J:\Instal\MyProg_files\*"; DestDir: "C:\Program Files\MyProg\MyProg_files"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "J:\Instal\Map\*"; DestDir: "C:\Program Files\MyProg\Map"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "J:\Instal\clients\*"; DestDir: "C:/WINDOWS/system32"; Flags: ignoreversion recursesubdirs createallsubdirs


boss911 08-12-2008 01:30 975070

Саш_ОК
  1. А какая собственно проблема, ведь работает, в двух позициях? Если вы хотите, чтобы определенная задача была выбрана по умолчанию, добавьте туда флаг unchecked.

  2. Для начала, применяйте для директорий константы:
    • WINDOWS/system32 - {sys}
    • Program Files - {pf}

    Покажите, что у вас тут:
    Код:

    [Setup]
    DefaultDirName=


Саш_ОК 08-12-2008 08:43 975157

DefaultDirName={pf}\MyProg

Resylenr 08-12-2008 12:56 975411

Как создать скрипт чтобы на страницу "Выбор папки установка" перенести чебоксы создания ярлыков и установки доп. компонентов.



Как можно извлекать 7-Zip, RAR архивы чтоб процесс их распаковки отображался в прогрессбаре.



Помогите очень надо.

boss911 08-12-2008 17:15 975652

Цитата:

Цитата Саш_ОК
DefaultDirName={pf}\MyProg »

Должно работать так, из вашего примера:
Код:

Source: "J:\Instal\Map\*"; DestDir: "{app}\Map"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "J:\Instal\Adobe_Reader\*"; DestDir: "{app}\Adobe_Reader"; Flags: ignoreversion recursesubdirs createallsubdirs

Так же обратите внимание на то, что я писал вам выше.

Саш_ОК 08-12-2008 17:47 975679

boss911
Спасибо помогла!
Ещё такой вопрос можно так зделать что б параметр exclusive біл для обеих галочок -а то я его ставлю а он только на ондном какомто параметре -или на роб стол ярлик или в панель бистр запуска!
Спс
Или что ти посоветуеш?

Resylenr 08-12-2008 18:11 975695

Пожалуйста помагите

boss911 08-12-2008 19:13 975737

Цитата:

Цитата Саш_ОК
или на роб стол ярлик или в панель бистр запуска! »

А так устроена функция (флаг) exclusive, одно из двух должно быть выбрано по умолчанию. Выбор по Умолчанию можно выставлять флагом unchecked в тех чекбоксах и радиобатонах, которые вы не хотите, чтобы они были выбраны. Возможною, ситуацию можно решить с помощью кода в Паскале, но тут я далек.

Resylenr 09-12-2008 19:03 976604

boss911, Помоги мне решить проблему, которую я описал выше.

boss911 09-12-2008 19:20 976614

Resylenr
Цитата:

Цитата boss911
Возможною, ситуацию можно решить с помощью кода в Паскале, но тут я далек. »

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

Diman19 13-12-2008 21:27 980352

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

Resylenr 16-12-2008 19:15 982207

У каво есть скрипт или библиотека для распаковки архивов FreeArc (.arc) с отображением в прогрессбаре.

Gennadich 17-12-2008 18:10 983184

Никто не знает как предотвратить возможность одновременного запуска нескольких экземпляров сетапа?

Resylenr 18-12-2008 04:57 983640

Diman19,
Чтобы получить раскрывающий список компонентов (и многие другие возможности), установи ISPack v5.2.3 (обязательно с препроцессором), а затем обнови Inno Setup до расширенной версии от ResTools.

И потом в скрипте, в секцию [Setup], достаточно поставить ComponentsListTVStyle=true и всё, будет такой список компонентов...

Resylenr 20-12-2008 06:42 985468

Подскажите как заблокировать чекбокс на станице выбора дополнительных задач.
И как если после установки приложения при запуске установщика выводилось сообщениие:

Запустить Программу XXXX
Да Нет
при нажатии Да запускалась программа, а при Нет выход из программы установки.

Скрин:

МИШАНЧИК 31-12-2008 14:07 994491

Подскажите пожалуйста! Как в скрипте правильно укзать, чтоб было не:
[Files]
Source: {app}\хххх.exe; DestDir: {app};
Source: {app}\хххх.exe.manifest; DestDir: {app};
,
а чтоб просто указать в какой папке находится исходное содержимое?

Serega 31-12-2008 14:42 994516

Цитата:

Цитата МИШАНЧИК
чтоб просто указать в какой папке находится исходное содержимое? »

Если вы имеете в виду, как это записать одной строкой, то:
[Files]
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

NeleGALL 09-01-2009 12:45 1001432

Здравствуйте, может эта информация где-то поднималась, но мне найти не удалось. Меня интересует, как можно bin файлы переименовать в установщике? Чтобы файл setup-1.bin стал, к пример part1.bin, и при этом установщик его корректно принял.

Саш_ОК 09-01-2009 16:48 1001678

Дайте пож силку на пост где обьясняют как делать инсталятор с bin файлами -а то немогу найти!
Буду благодарен!

boss911 09-01-2009 20:03 1001924

Цитата:

Цитата Саш_ОК
как делать инсталятор с bin файлами -а то немогу найти! »

Попробуйте -
Код:

[Setup]
DiskSpanning=true


Саш_ОК 11-01-2009 16:31 1003802

Помогите -не хочет рабоать -работает только что то одно.
читать дальше »

[code]
Procedure InitializeWizard();
begin
with WizardForm do begin
Position:=poScreenCenter
ClientWidth:=690
ClientHeight:=496
Font.Color:=65280
Font.Name:='MS Sans Serif'
Font.Style:=[]
with Bevel do begin
Left:=0
Top:=313
Width:=497
Height:=2
Visible:=False
end
with CancelButton do begin
Left:=576
Top:=465
Width:=78
Height:=20
BringToFront
end
with NextButton do begin
Left:=429
Top:=465
Width:=78
Height:=20
BringToFront
end
with BackButton do begin
Left:=303
Top:=465
Width:=78
Height:=20
BringToFront
end
with OuterNotebook do begin
Left:=0
Top:=0
Width:=690
Height:=496
with WelcomePage do begin
Color:=0
with WizardBitmapImage do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with WelcomeLabel2 do begin
Left:=205
Top:=230
Width:=465
Height:=200
end
with WelcomeLabel1 do begin
Left:=205
Top:=190
Width:=465
Height:=28
Font.Color:=65280
Font.Size:=8
end
end
with InnerPage do begin
with Bevel1 do begin
Left:=0
Top:=58
Width:=499
Height:=3
Visible:=False
end
with InnerNotebook do begin
Left:=205
Top:=79
Width:=465
Height:=354
BringToFront
Color:=0
with LicensePage do begin
with LicenseNotAcceptedRadio do begin
Left:=0
Top:=338
Width:=465
Height:=17
Checked:=True
Color:=clWindow
end
with LicenseAcceptedRadio do begin
Left:=0
Top:=321
Width:=465
Height:=17
Color:=clWindow
end
with LicenseMemo do begin
Left:=0
Top:=38
Width:=465
Height:=282
ReadOnly:=True
ScrollBars:=ssVertical
end
with LicenseLabel1 do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with PasswordPage do begin
with PasswordEdit do begin
Left:=0
Top:=50
Width:=465
Height:=21
Font.Color:=clWindowText
end
with PasswordEditLabel do begin
Left:=0
Top:=34
Width:=465
Height:=14
end
with PasswordLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with InfoBeforePage do begin
with InfoBeforeMemo do begin
Left:=0
Top:=24
Width:=465
Height:=327
ScrollBars:=ssVertical
end
with InfoBeforeClickLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with UserInfoPage do begin
with UserInfoSerialEdit do begin
Left:=0
Top:=120
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoSerialLabel do begin
Left:=0
Top:=104
Width:=465
Height:=14
end
with UserInfoOrgEdit do begin
Left:=0
Top:=68
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoOrgLabel do begin
Left:=0
Top:=52
Width:=465
Height:=14
end
with UserInfoNameEdit do begin
Left:=0
Top:=16
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoNameLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectDirPage do begin
with SelectDirBitmapImage do begin
Left:=0
Top:=0
Width:=32
Height:=32
Visible:=False
end
with DiskSpaceLabel do begin
Left:=0
Top:=340
Width:=465
Height:=14
end
with DirBrowseButton do begin
Left:=387
Top:=289
Width:=78
Height:=23
end
with DirEdit do begin
Left:=0
Top:=290
Width:=377
Height:=21
Font.Color:=clWindowText
end
with SelectDirBrowseLabel do begin
Left:=0
Top:=24
Width:=465
Height:=28
end
with SelectDirLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectComponentsPage do begin
with ComponentsDiskSpaceLabel do begin
Left:=0
Top:=340
Width:=417
Height:=14
end
with ComponentsList do begin
Left:=0
Top:=48
Width:=465
Height:=275
Font.Color:=65280
Color:=0
end
with TypesCombo do begin
Left:=0
Top:=24
Width:=465
Height:=21
Font.Color:=65280
Color:=0
end
with SelectComponentsLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectProgramGroupPage do begin
with SelectGroupBitmapImage do begin
Left:=0
Top:=0
Width:=32
Height:=32
Visible:=False
end
with NoIconsCheck do begin
Left:=0
Top:=312
Width:=377
Height:=20
Color:=clWindow
end
with GroupBrowseButton do begin
Left:=387
Top:=289
Width:=78
Height:=23
end
with GroupEdit do begin
Left:=0
Top:=290
Width:=377
Height:=21
Font.Color:=clWindowText
end
with SelectStartMenuFolderBrowseLabel do begin
Left:=0
Top:=24
Width:=465
Height:=28
end
with SelectStartMenuFolderLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectTasksPage do begin
with TasksList do begin
Left:=0
Top:=34
Width:=465
Height:=317
Color:=0
end
with SelectTasksLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with ReadyPage do begin
with ReadyMemo do begin
Left:=0
Top:=34
Width:=465
Height:=317
Color:=0
end
with ReadyLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with PreparingPage do begin
with PreparingErrorBitmapImage do begin
Left:=0
Top:=0
Width:=16
Height:=16
Visible:=False
end
with PreparingLabel do begin
Left:=24
Top:=0
Width:=393
Height:=14
Visible:=False
end
end
with InstallingPage do begin
with FilenameLabel do begin
Left:=0
Top:=16
Width:=465
Height:=16
end
with StatusLabel do begin
Left:=0
Top:=0
Width:=465
Height:=16
end
with ProgressGauge do begin
Left:=0
Top:=42
Width:=465
Height:=21
Min:=0
Max:=100
end
end
with InfoAfterPage do begin
with InfoAfterMemo do begin
Left:=0
Top:=24
Width:=465
Height:=327
ScrollBars:=ssVertical
end
with InfoAfterClickLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
end
with MainPanel do begin
Left:=0
Top:=0
Width:=690
Height:=496
with WizardSmallBitmapImage do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with PageDescriptionLabel do begin
Left:=25
Top:=25
Width:=500
Height:=14
Color:=0
Font.Color:=65280
end
with PageNameLabel do begin
Left:=15
Top:=7
Width:=500
Height:=14
Color:=0
Font.Color:=65280
end
end
end
with FinishedPage do begin
Color:=0
with WizardBitmapImage2 do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with NoRadio do begin
Left:=205
Top:=227
Width:=465
Height:=17
end
with YesRadio do begin
Left:=205
Top:=199
Width:=465
Height:=17
end
with RunList do begin
Left:=205
Top:=199
Width:=465
Height:=149
BorderStyle:=bsNone
end
with FinishedLabel do begin
Left:=205
Top:=119
Width:=465
Height:=53
end
with FinishedHeadingLabel do begin
Left:=205
Top:=79
Width:=465
Height:=24
Font.Color:=65280
Font.Size:=8
end
end
end
with BeveledLabel do begin
Left:=10
Top:=478
Width:=150
Height:=14
Enabled:=False
Color:=0
end
end
end;

Procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
end.

Serega 11-01-2009 17:18 1003859

Саш_ОК, вы используйте тег [more], а то ваше сообщение практически на всю страницу...
Цитата:

Цитата Саш_ОК
не хочет рабоать -работает только что то одно »

встречный вопрос, что должна делать команда WizardForm.FileNameLabel.Visible:= False;?
Скомпилировал скрипт и от использования данной команды ничего не изменилось...

Саш_ОК 11-01-2009 17:38 1003884

Спасибо учту!
а команда WizardForm.FileNameLabel.Visible:= False; даёт такой ефект что не видно куда и какие файли устанавливаются!
и получается взял с двух кодов параметри а работает только один постоянно ошибку пишет мол знак не такой в конце строки...
но я вроде в конуе строки поставил два раза end;end; и запело.
спс сам всё разрулил иззза своейже невнимательности.

Temik2009 13-01-2009 19:42 1006585

Подскажите плиз, как в Inno, в эти места вставить свои картинки

Serega 13-01-2009 19:59 1006597

Цитата:

Цитата Temik2009
вставить свои картинки »

[Setup]
...........
WizardImageFile=путь\картинка.bmp - размер 164х314
WizardSmallImageFile=путь\картинка.bmp - размер 55х55

Temik2009 13-01-2009 20:55 1006649

Serega_, Спасибо

boss911 13-01-2009 23:04 1006811

Temik2009

Можешь их так же закинуть в папку с компилятором, тогда путь можно не указывать:
Код:

[Setup]
WizardImageFile=compiler:BigImage.bmp
WizardSmallImageFile=compiler:SmallImage.bmp


Temik2009 14-01-2009 15:24 1007432

Скажите, а что надо прописать, чтобы после установки на рабочем столе ярлык появился ?
И ещё вопросик, но не по Inno. Как сделать autorun с собственным дизайном (Чтобы картинка была и т.д.) и кнопки: Установить, Запустить, Прочитать, файл read me и установку дополнительных приложений?
Спасибо!

Serega 14-01-2009 16:08 1007475

Temik2009, для добавления ярлыка на рабочий стол, добавьте в скрипт:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Icons]
Name: {userdesktop}\My Program; Filename: {app}\My Program.exe; WorkingDir: {app}; Tasks: desktopicon


{userdesktop} - для данного пользователя;
{commondesktop} - для всех пользователей.

gvshil 14-01-2009 16:21 1007489

Цитата:

Цитата Temik2009
Как сделать autorun с собственным дизайном »

AutoPlay Media Studio, Multimedia Builder - очень не плохие.

Merlin_jr 16-01-2009 14:48 1009569

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

Удаление каталога должно происходить до начала распаковки файлов.

jameszero 16-01-2009 16:05 1009631

Merlin_jr
На примере удаления файла разберётесь?

[InstallDelete] имеет такой же синтаксис, как [UninstallDelete]
Последний рассмотрен в справке.

Merlin_jr 16-01-2009 16:43 1009669

Такая конструкция будет работать?

Код:

[InstallDelete]
Name: "{app}\CheckXML"; Type: filesandordirs
Name: "{app}\2-NDFL_test"; Type: filesandordirs

или надо так
Код:

[InstallDelete]
Type: filesandordirs; Name: "{app}\CheckXML"
Type: filesandordirs; Name: "{app}\2-NDFL_test"


boss911 16-01-2009 17:22 1009696

Цитата:

Цитата Merlin_jr
Такая конструкция будет работать? »

Да. Я бы воспользовался первым вариантом, хотя, должен сработать и второй, но первый привычнее (стандартней) выглядит.

Serega 16-01-2009 18:04 1009734

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

Merlin_jr 16-01-2009 18:08 1009738

Спасибо всем кто помогал.

Dimika 16-01-2009 18:21 1009751

Привет, столкнулся с проблемой. Помогите ПЛЗ.
Из секции Run запускаются три exe файла, которые хоже кое-что устанавливаю. Как сделать, чтобы прогресс-бар установки останавливался процентах на 70 и потом по 10 процентов на каждый из трех exe? И как обновлять позицию у прогресс-бара после того как запускаемый exe отработал?

Dimika 19-01-2009 13:35 1012551

Или как сделать отдельный прогресс-бар для инструкций с секции Run

i.Sky 20-01-2009 22:36 1014247

Подскажите пожалуйста как в одну секцию INI файла записать несколько разных значений ключа с одим именем? Нужен результат вида:
[Section]
NAME=1
NAME=2
NAME=3

Скрипт вида:
Filename: {app}\settings.ini; Section: Section; Key: NAME; String: 1; Components: 1
Filename: {app}\settings.ini; Section: Section; Key: NAME; String: 2; Components: 2
Filename: {app}\settings.ini; Section: Section; Key: NAME; String: 3; Components: 3

Просто переписывает значение NAME

Serega 20-01-2009 23:03 1014266

i.Sky, никак. Имя ключа одно и тоже, инсталлятор естественно и будет перезаписывать одно значение другим, в итоге останется последнее. Выход либо писать в разные секции, либо менять имя ключа...

i.Sky 21-01-2009 05:57 1014455

Serega_, спасибо за ответ быстрого реагирования :)
А может просто строки можно как-нибудь внести? Или сделать NAME(1), NAME(2), NAME(3), а потом убрать с них нумерацию? Только я не знаю как...

Serega 21-01-2009 08:39 1014490

Цитата:

Цитата i.Sky
строки можно как-нибудь внести »

только вручную...
Цитата:

Цитата i.Sky
Или сделать NAME(1), NAME(2), NAME(3), а потом убрать с них нумерацию? »

а как потом читать данные или записывать в .ini Восприниматься будет только первый NAME.

HQ-Team nuke 21-01-2009 11:22 1014580

Есть portable программа, а именно winamp, все отлично, за исключением одного, все расширения к нему привязываются лишь после запуска и захода в настройки, пробовал это делать средством AutoIt3, но как то это долго очень и не есть правельно, хотелось бы как то это запаковать в Inno Setup с дальнейшей тихой установкой и привязкой расширения к файлам, я скачал мануал по Inno Setup и наткнулся на привязку расширений, возможно ли мною задуманное, кто этим уже занимался, может подскажите что к чему, просто новичек в Inno Setup. Спасибо.

i.Sky 21-01-2009 11:25 1014583

А на Pascal можно реализовать написание такого INI файла? Может ли кто пример написать?

Serega 21-01-2009 12:18 1014631

Цитата:

Цитата i.Sky
А на Pascal можно реализовать написание такого INI файла? »

Вот накидал пример
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
DefaultGroupName=My Program
OutputDir=userdocs:Inno Setup Examples Output

[_Code]
procedure BuildINI();
begin
    SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini',
    '[Section]' + #13 + 'NAME=1' + #13 + 'NAME=2' + #13 + 'NAME=3' + #13, true);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssDone then
    BuildINI();
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    DeleteFile(ExpandConstant('{app}\desktop.ini'));
  end;
end;


Serega 21-01-2009 12:43 1014655

Цитата:

Цитата HQ-Team nuke
в Inno Setup с дальнейшей тихой установкой и привязкой расширения к файлам »

Скажу честно, winamp ни разу не пересобирал... Я в своё время делал сборку IsoBuster и делал там ассоциации, выкинул лишнее, но принцип я думаю вам будет понятен
читать дальше »

;............................................................
[Tasks]
Name: a; Description: (*.ISO) Файлы-образы; GroupDescription: Выбор файловых ассоциаций:; Flags: unchecked
Name: b; Description: (*.BIN) Файлы-образы; GroupDescription: Выбор файловых ассоциаций:; Flags: unchecked
;............................................................

[Registry]
Root: HKCR; Subkey: IsoBuster.iso; ValueType: String; ValueData: ISO Image; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: IsoBuster.iso\DefaultIcon; ValueType: String; ValueData: {app}\IsoBuster.exe,1; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: IsoBuster.iso\shell\extract; ValueType: string; ValueData: Извлечь в IsoBuster; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: IsoBuster.iso\shell\extract\command; ValueType: String; ValueData: """{app}\IsoBuster.exe"" ""/ef:"" ""/c"" ""%1"""; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: IsoBuster.iso\shell\open; ValueType: string; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: IsoBuster.iso\shell\open\command; ValueType: String; ValueData: """{app}\IsoBuster.exe"" ""%1"""; Flags: uninsdeletekey; Tasks: a
Root: HKCR; Subkey: .iso; ValueType: String; ValueData: IsoBuster.iso; Flags: uninsdeletevalue; Tasks: a
Root: HKCR; Subkey: IsoBuster.bin; ValueType: String; ValueData: BIN Image; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: IsoBuster.bin\DefaultIcon; ValueType: String; ValueData: {app}\IsoBuster.exe,1; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: IsoBuster.bin\shell\extract; ValueType: string; ValueData: Извлечь в IsoBuster; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: IsoBuster.bin\shell\extract\command; ValueType: String; ValueData: """{app}\IsoBuster.exe"" ""/ef:"" ""/c"" ""%1"""; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: IsoBuster.bin\shell\open; ValueType: string; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: IsoBuster.bin\shell\open\command; ValueType: String; ValueData: """{app}\IsoBuster.exe"" ""%1"""; Flags: uninsdeletekey; Tasks: b
Root: HKCR; Subkey: .bin; ValueType: String; ValueData: IsoBuster.bin; Flags: uninsdeletevalue; Tasks: b
; ................................................................

HQ-Team nuke 21-01-2009 13:40 1014723

Цитата:

Цитата Serega_
Скажу честно, winamp ни разу не пересобирал... Я в своё время делал сборку IsoBuster и делал там ассоциации, выкинул лишнее, но принцип я думаю вам будет понятен »

Да мне его как раз и не нужно пересоберать, он имеет один исполняемый файл, при его запуске он создает возле исполняемого файла папку, в которой и хранит все свои настройки, т.е. другим языком как получился этот один файл: Установил Winamp, настроил, упаковал.
Да, мне понятен принцип привязки, немного разберусь в программе, попробую привязать, спасибо.

i.Sky 22-01-2009 05:22 1015474

Цитата:

Цитата Serega_
Вот накидал пример »

Спасибо. Сразу еще вопрос - как прикрутить зависимость от устанавливаемых компонентов к этому коду? Просто в секции [_Сode] ещё ни разу ничего не писал и не знаю что и как.

Serega 22-01-2009 17:36 1016029

Цитата:

Цитата i.Sky
как прикрутить зависимость от устанавливаемых компонентов »

В первом примере, как должно быть, т.е. значения будут перезаписываться.
Второй пример как вы хотели, т.е. просто в зависимости от выбора компонента будет добавлятся ещё одна строка.
1. Вариант
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Components]
Name: main; Description: Моя программа™; Types: full custom
Name: help; Description: Помощь; Types: full custom
Name: help\documentation; Description: Документация; Types: full custom
Name: help\manual; Description: Руководство пользователя; Types: full custom

[ Code ]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep=ssDone then
  begin
    if IsComponentSelected('main') then
    SetIniString('Section', 'NAME', '1', ExpandConstant('{app}')+'\main.ini');

    if IsComponentSelected('help') then
    SetIniString('Section', 'NAME', '2', ExpandConstant('{app}')+'\main.ini');

    if IsComponentSelected('help\documentation') then
    SetIniString('Section', 'NAME', '3', ExpandConstant('{app}')+'\main.ini');

    if IsComponentSelected('help\manual') then
    SetIniString('Section', 'NAME', '4', ExpandConstant('{app}')+'\main.ini');
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    DeleteFile(ExpandConstant('{app}\main.ini'));
  end;
end;


2. Вариант
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Components]
Name: main; Description: Моя программа™; Types: full custom
Name: help; Description: Помощь; Types: full custom
Name: help\documentation; Description: Документация; Types: full custom
Name: help\manual; Description: Руководство пользователя; Types: full custom

[ Code ]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep=ssDone then
  begin
    SaveStringToFile(ExpandConstant('{app}')+'\main.ini', '[Section]' + #13, true);

    if IsComponentSelected('main') then
    SaveStringToFile(ExpandConstant('{app}')+'\main.ini', 'NAME=1' + #13, true);

    if IsComponentSelected('help') then
    SaveStringToFile(ExpandConstant('{app}')+'\main.ini', 'NAME=2' + #13, true);

    if IsComponentSelected('help\documentation') then
    SaveStringToFile(ExpandConstant('{app}')+'\main.ini', 'NAME=3' + #13, true);

    if IsComponentSelected('help\manual') then
    SaveStringToFile(ExpandConstant('{app}')+'\main.ini', 'NAME=4' + #13, true);
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    DeleteFile(ExpandConstant('{app}\main.ini'));
  end;
end;


i.Sky 23-01-2009 05:55 1016493

Спасибо, Serega_. Процесс пошёл.

vserd 30-01-2009 18:34 1024738

Как можно отменить установку если произошла ошибка в CurStepChanged?

т.е.
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then begin
    If AlarmFunc then begin
        {здесь должен быть некоторый код, который отменит установку.}
(*
        WizardForm.close;
        abort;
        этот код не отменяет устновку :(
*)
    end;
  end
end;


Serega 30-01-2009 18:59 1024757

Цитата:

Цитата vserd
Как можно отменить установку если произошла ошибка в CurStepChanged? »

Вы пытаетесь отменить установку уже после того как она произошла (ssPostInstall), т.е. надо посмотреть, если уже создан деинсталлятор, а он должен быть уже создан, то вызывать его с командой /verysilent...
А вообще до установки условие AlarmFunc проверить нельзя?

P.S.
WizardForm.close - закрывает инсталлятор, но никак не отменяет установку...

vserd 30-01-2009 19:12 1024768

Цитата:

Цитата Serega_
А вообще до установки условие AlarmFunc проверить нельзя? »

К сожалению низя :((

Serega 30-01-2009 20:38 1024838

vserd, придумал решение
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[ Code]
function NextButtonClick(CurPage: Integer): Boolean;
var
  ResultCode: Integer;
begin
  Result:=True;
  if CurPage=14 then
    If (FileSearch('Program.exe', ExpandConstant('{pf}'))='') then
  Exec(ExpandConstant('{uninstallexe}'), '/verysilent', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ResultCode);
end;


Вместо проверки на присутствие файла, поставьте проверку вашего условия. Специально выложил целиком, чтоб вы проверили, как работает.
Успехов...

Drongo 02-02-2009 14:08 1027183

Доброго здоровья всем. Скажите, что и как нужно сделать, чтобы при установки была проверка, как на моём скрине:



Это с игры S.T.A.L.K.E.R сделал, у меня есть методички для этого компилятора, но там у себя не нашёл скриптов как сделать такую проверку. Если параметры железа подходят, вывести зелёным цветом индикацию и кнопку Далее > активизировать, а если что-то из этого не подходит, то красная полоса и деактивировать кнопку Далее >, ну как в игровом инсталяторе сделано.

Serega 02-02-2009 16:11 1027289

Drongo, вот нашёл у себя в примерах скриптов, кнопку ‘Далее’ сделал не активной, если требования не соответствуют.
В скрипте есть описания, разобраться, по крайней мере можно...
читать дальше »
Код:

[Setup]
AppName=Ultimate Test
AppVerName=Ultimate Test 1.0 Beta 1
DefaultDirName={pf}\Ultimate Test

[_Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}       
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;
 
var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';
 
function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';
 
function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';
 
function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';
 
function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';
 
function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin       
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
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 CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;
       
function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;
       
procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
    Font.Color := clBlack
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)
 
  // Операционная система:
  SystemVersionPanel.Color := $CCFFCC
 
  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)
                           
  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
    end
 
  // Процессор:
  ProcessorMHzPanel.Color := $CCFFCC
 
  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := $CCCCFF
      ChangeText := True
    end
   
  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := $CCFFCC
 
  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0       
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := $CCFFCC
 
  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := $CCCCFF
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := $CCFFCC
  if not CheckMemorySize(NeedMB) then
    begin
      RAMTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'
 
  // Виртуальная память:
  PageFileTotalPanel.Color := $CCFFCC
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
      PageFileTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
 
  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end
end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;


Drongo 02-02-2009 17:44 1027395

Честно говоря, я не разбираюсь в этом синтаксисе, но у меня ругается при попытке скомпилировать, на этих строках, которые начинаются символом '#'.
Код:

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1        {Win9x}       
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

Раньше необходимости подключать скрипты не было, теперь вот незнаю правильно ли делаю или нет?
Код:

...
[Files]
Source: "D:\Контроль\MyNameProgram\MyProgram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Контроль\MyNameProgram\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; Внимание: Не используйте "Флажок : Игнор. версии" на систем. файл

[code]
 // Вставить код написанный Serega_
...


Serega 02-02-2009 18:49 1027472

Цитата:

Цитата Drongo
у меня ругается при попытке скомпилировать, на этих строках »

Потому, что у вас не установлен preprocessor, извиняюсь, что сразу не сказал... :wink:
Цитата:

Цитата Drongo
вот незнаю правильно ли делаю или нет? »

Всё правильно... Вообще можно кавычки не ставить, они не обязательны и первая строка в секции [Files] тоже не обязательна, т.к. вы всё равно копируете всю папку, т.е. у вас записано всё правильно, но я бы написал:
читать дальше »
Код:

...
[Files]
Source: D:\Контроль\MyNameProgram\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[ Code]
 // Вставить код, но он написан не Serega_... :)
...


P.S.
Я бы ещё рекомендовал скачать и установить расширенную версию для Inno Setup от ResTools, очень полезная вещь, расширяет возможности Inno Setup...

Саш_ОК 02-02-2009 22:44 1027718

Ребята а не скажите как зделать так чтоб инсталятор нёс какойто файлик в котором указана версия программи и последнюю дату установки -и что б при установки нового подобного инсталятора (обновления) -видавалось сообщение о версии проги и о версии проги чято устанавливется!!
БУДУ НУ ОЧЕНЬ БЛАГОДАРЕН!

Serega 03-02-2009 00:29 1027804

Саш_ОК, непонятен вопрос... какой файл должен нести инсталлятор? Вы хотите создать файл в момент инсталляции в папке с приложением, а при установке обновления считать из него данные? Какая преследуется цель, запретить установку, если версия не соответствует или просто вывести сообщение о версии установленного файла?

Drongo 03-02-2009 15:22 1028315

Serega_, Тут такой небольшой вопрос по коду, всё скачал, всё сделал - скомпилировал, получилось даже лучше чем ожидалось, :up
результат:




Как, где и на что сменить строку кода, чтобы параметры Системы подошли? :dont-know

Извиняюсь за поспешность, решил методом "тыка". :yes: В коде отсутстует строка для XP Service Pack 3, будем считать это домашним заданием. :)
Код:

...
  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
...


Получилось!!! ))))

Serega 03-02-2009 15:28 1028320

Drongo, :up

Саш_ОК 03-02-2009 20:05 1028616

Цитата:

Serega
Я незнаю как зделать так чтоб когда человек установил мою прогу (назвём её №1) и попользоввшись ней период времени -он скачивает обновление в виде exe файла которий по ходу установки -находит (КАКОЙТО ФАЙЛ- а какой и как его зделать я незнаю - но думаю может с помощью рееста и ещё думаю ВЫ подскажите) - программа викидывает окошко с надписью мол у Вас страрая версия такая-такаято -мол установить новую ???? ДА НЕТ.
Я понятно написали или как всегда)

Drongo 03-02-2009 21:17 1028705

Цитата:

Цитата Саш_ОК
Я понятно написали или как всегда) »

Я кажется понял, вы хотите обновление программы делать.

Serega 03-02-2009 22:37 1028804

Саш_ОК,
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={code:GetInstallPath}
OutputDir=.

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:GetInstallPath}

[_Code]
// Берём путь установки программы из реестра
function GetInstallPath( AppID: String ): String;
var
  Path: String;
begin
  Path:= '';
  RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1','InstallLocation', Path);
  Result:= Path;
end;

function InitializeSetup(): Boolean;
var
  Version,s:string;

begin
  Result:=True;
  //  Проверка установлена ли программа, через реестр
  if not RegValueExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1','InstallLocation') then
  begin
    s:='Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.';
    MsgBox(s, mbError, mb_Ok);
    Result:=False;
  end else
  //  Проверка присутствия файла в папке с установленной программой
  begin
  If (FileSearch('MyProg.exe', ExpandConstant('{code:GetInstallPath}'))='') then
    begin
      s:='Извините, в директории '+ExpandConstant('{code:GetInstallPath}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
      MsgBox(s, mbError, mb_Ok);
      Result:= False;
    end else
      // И проверка версии оригинальных файлов
    begin
      GetVersionNumbersString(ExpandConstant('{code:GetInstallPath}\MyProg.exe'), Version);
      if Version < '1.5' then
      begin
        s:='У Вас страрая версия такая-такаято -мол установить новую ????';
        if MsgBox(s, msgButtonInstall, mb_yesno) = idNo then
      begin
        Result:= False;
        exit;
      end else
        Result:=True;
      end;
    begin
      if Version >= '1.5' then
      begin
        s:='Обновление не требуется!';
        MsgBox(s, msgButtonOK, mb_ok);
        Result:= False;
        exit;
      end;
    end;
    end;
  end;
end;


Саш_ОК 03-02-2009 22:55 1028818

Цитата:

Цитата Serega_
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1','InstallLocation', Path); »

а как такой файлик создать?
СПАСИБО ВАМ!!!!!!

Serega 03-02-2009 23:25 1028854

Саш_ОК, этот ключ в реестре, создаст ваш первый инсталлятор, а я вам написал код уже для обновления данной программы...
Чтоб попробовать, как работает данный скрипт, закомментируйте всю секцию [code], скомпилируйте и произведите установку. Затем раскомментируйте секцию и снова скомпилируйте, я думаю вам всё станет ясно как он работает...

x-net 06-02-2009 15:52 1031371

Как сделать что бы было как на рисунке?
Готовый скрипт можно будет, только не в стиле InstallShield

Serega 06-02-2009 20:53 1031628

Вложений: 1
x-net, вот накидал вам пример...
По поводу формы, скорей всего используется Skin Builder.

x-net 06-02-2009 21:47 1031672

Сделал, но как убрать белый фон, оставив только текст с графикой

Serega 07-02-2009 01:59 1031805

x-net, а конкретно, что вы сделали, т.е. что применили из того, что я вам дал? Этот скриншот вы показывали ещё 5 февраля на другом форуме и в нём ничего не поменялось...
Сразу второй скриншот и надо было паказать... добавьте в procedure InitializeWizard(); после begin
читать дальше »
Код:

// скрываем надписи
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
  WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\ваш.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
  WizardForm.WizardBitmapImage.Align:=true;

// создаём надписи поверх рисунка
    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;


tem000 19-02-2009 14:15 1043165

Всем привет!!! Подскажите кто знает, можно ли вставить свою картинку не 50х50 а на всю длинну в этот
и можно ли сделать чтобы отображался одинаковый шрифт и одна и та же картинка в диалоге при начале установки и в диалоге завершения установки

boss911 19-02-2009 17:37 1043335

tem000

Если я правильно понял справку IS, то шрифты можно менять так:
Код:

[LangOptions]
LanguageName=English
LanguageID=$0409
LanguageCodePage=0
DialogFontName= MS Shell Dlg
DialogFontSize=8
WelcomeFontName=Verdana
WelcomeFontSize=12
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8


Serega 19-02-2009 21:15 1043501

Цитата:

Цитата tem000
Подскажите кто знает »

Накидал пример
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

Code]
var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;


tem000 19-02-2009 23:15 1043587

Serega_, УРА!!! усе работает :yahoo: , большое человеческое спасибо, будем творить красоту :laugh:

Merlin_jr 20-02-2009 12:09 1043881

Приветствую

Подскажите как правильно/корректно реализовать проверку принадлежности Пользователя системы к группе Локальных администраторов на компьютере?

планируется использовать на системах от Win9x и до WinVista. У клиентов разные ОСи стоят.

tem000 20-02-2009 19:28 1044278

Serega_, небольшая трабла в завершении установки, там можно как нибудь прозрачность замутить, помоги если не трудно, а то я в секции CODE ваще ниче не понимаю.

Serega 20-02-2009 22:42 1044443

Цитата:

Цитата tem000
небольшая трабла в »

пример:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

Code]
var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;
// процедура для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
if CurStep = ssDone then
  begin
    if RunMyProg.Checked then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;
// низнаю почему, но Hide не действует. Поэтому просто уменьшил размер
  WizardForm.RunList.Height := 0;
  WizardForm.RunList.Width := 0;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;

  RunMyProg := TCheckBox.Create(WizardForm);
  RunMyProg.Parent := WizardForm.FinishedPage;
  RunMyProg.Left := ScaleX(150);
  RunMyProg.Top := ScaleY(152);
  RunMyProg.Width := ScaleX(14);
  RunMyProg.Height := ScaleX(14);
//  RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

      RunLabel:=TLabel.Create(WizardForm);
      RunLabel.Left := ScaleX(170);
      RunLabel.Top := ScaleY(150);
      RunLabel.Width := ScaleX(200);
      RunLabel.Height := ScaleY(20);
      RunLabel.AutoSize := False;
      RunLabel.WordWrap := True;
      RunLabel.Font.Color := clBlack;
      RunLabel.Font.Size := 10;
      RunLabel.Transparent := True;
      RunLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить программу';
end;


tem000 20-02-2009 23:31 1044485

Serega_, все работает единственное чекбокс активируется только при наведении на сам квадратик. В других диалогах, можно нажать на текст чтобы поставить галочку, это понятно если чекбокс растягивать на текст, то опять получится белое пятно. В принципе это не критично, главное все получилось СПАСИБО!!! :tongue:

Serega 21-02-2009 00:02 1044515

tem000, я как то об этом не подумал, добавил
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

Code]
var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;

procedure RLabelOnClick(Sender: TObject);
begin
  if RunMyProg.Checked=false then
  begin
    RunMyProg.Checked := true;
  end else
    RunMyProg.Checked := false;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
if CurStep = ssDone then
  begin
    if RunMyProg.Checked then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;
// низнаю почему, но Hide не действует. Поэтому просто уменьшил размер
  WizardForm.RunList.Height := 0;
  WizardForm.RunList.Width := 0;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;

  RunMyProg := TCheckBox.Create(WizardForm);
  RunMyProg.Parent := WizardForm.FinishedPage;
  RunMyProg.Left := ScaleX(150);
  RunMyProg.Top := ScaleY(152);
  RunMyProg.Width := ScaleX(14);
  RunMyProg.Height := ScaleX(14);
//  RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

      RunLabel:=TLabel.Create(WizardForm);
      RunLabel.Left := ScaleX(170);
      RunLabel.Top := ScaleY(150);
      RunLabel.Width := ScaleX(200);
      RunLabel.Height := ScaleY(20);
      RunLabel.AutoSize := False;
      RunLabel.WordWrap := True;
      RunLabel.Font.Color := clBlack;
      RunLabel.Font.Size := 10;
      RunLabel.OnClick := @RLabelOnClick;
      RunLabel.Transparent := True;
      RunLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить программу';
end;


tem000 21-02-2009 13:42 1044801

Serega_, ну ты крут!!! РЕСПЕКТ :teeth: :teeth: :teeth:

de_MAX 23-02-2009 14:50 1046433

Serega_, а есть возможность добавить в скрипт, чтоб и во время установки тоже была картинка (возможно смещение прогрессбара вниз и показ слайд-шоу в окне инсталлятора)?

Serega 23-02-2009 16:05 1046500

Цитата:

Цитата de_MAX
чтоб и во время установки тоже была картинка (возможно смещение прогрессбара вниз и показ слайд-шоу в окне инсталлятора)? »

Вы имеете ввиду

То на сколько я понимаю, там картинка просто накладывается сверху мастера и прогресс бар ничто иное, как обычный .gif. Ну мне тяжело судить я не видел сам инсталлятор и могу делать только предположения...

de_MAX 23-02-2009 16:23 1046510

Цитата:

Цитата Serega_
Вы имеете ввиду
так? »

Именно так. Но насколько я знаю это именно прогрессбар установки. Где-то встречал подобный скрипт, но не могу найти.

Serega 23-02-2009 16:45 1046528

de_MAX, не знаю, надо подумать...

de_MAX 26-02-2009 12:09 1049265

Serega_, нашел нечто подобное. Там конечно много всего лишнего.
читать дальше »
Код:

Code]
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
  URLLabel: TNewStaticText;
  TimerID: LongWord;
  currTime: Integer;
  SplashImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
  external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
  external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
  currTime := currTime + 1;
  case currTime of
  {#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
  2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
  3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
  4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
  5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
  6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
  7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
  8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
  9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
  end;
  if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
  BASS_SAMPLE_LOOP        = 4;  //повторение

type
  HSTREAM = DWORD;      //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
///////////////////////////////
var
  state, soft: boolean;
  Image1, Image2: TBitmapImage;
const
  NeedSize = 6;
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVEABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;

var
  ListBox: TListBox;

function GetLogicalDrives: DWORD;
  external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
  external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
  external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
  external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
  external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
  external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
  external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
  external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
  external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
  external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
  external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
  external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
  external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
  c, i: integer;
  stt, st, st1: string;
begin
  c := 0;
  st := s;

  for i := 1 to Length(st) do
  begin

    stt := copy(st, i, 1);
    if (stt = ' ') and (c >= 1) then
    begin
      st1 := st1;
      c := c + 1;
    end
    else if (stt = ' ') and (c = 0) then
    begin
      c := c + 1;
      st1 := st1 + stt;
    end
    else if (stt <> ' ') then
    begin
      c := 0;
      st1 := st1 + stt;
    end
  end;

  Result := st1;
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://game-torrent.info', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure ListBoxOnClick(Sender: TObject);
var
  NewLetter, OldString: string;
  i: Integer;
begin
  for i := 0 to ListBox.Items.Count - 1 do
  begin
    if ListBox.Selected[i] then
    begin
      NewLetter := Copy(ListBox.Items[i], 0, 1);
      OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
      WizardForm.DirEdit.Text := NewLetter + OldString;
    end;
  end;
end;


procedure InitializeWizard();
var
  Name1: string;
  i: Integer;
  Text: TNewStaticText;
  Path: string;
  FreeMB, TotalMB: Cardinal;
  drives: DWORD;

begin
  ExtractTemporaryFile('BASS.dll');
    ExtractTemporaryFile('my.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
begin
  BASS_Start();
  Name1:=ExpandConstant('{tmp}\my.mp3');
    i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
  if i <> 0 then
        begin
  BASS_ChannelPlay(i, True);
end
end

///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
  ExtractTemporaryFile('Image_1.bmp');
  ExtractTemporaryFile('Image_2.bmp');
  ExtractTemporaryFile('Image_3.bmp');
  ExtractTemporaryFile('Image_4.bmp');
  ExtractTemporaryFile('Image_5.bmp');
  ExtractTemporaryFile('Image_6.bmp');
  ExtractTemporaryFile('Image_7.bmp');
  ExtractTemporaryFile('Image_8.bmp');
  ExtractTemporaryFile('Image_9.bmp');
  ExtractTemporaryFile('Image_10.bmp');

  currTime := 0;

  WizardForm.ProgressGauge.Parent := WizardForm;
  WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
  WizardForm.ProgressGauge.Left := ScaleX(10);
  WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
  WizardForm.ProgressGauge.Height := 12;
  WizardForm.ProgressGauge.Hide;
  WizardForm.StatusLabel.Parent := WizardForm;
  WizardForm.StatusLabel.Left := ScaleX(10);
  WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
  WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
  WizardForm.StatusLabel.Hide;

  SplashImage := TBitmapImage.Create(WizardForm);
  SplashImage.Top := 0;
  SplashImage.Left := 0;
  SplashImage.Width := WizardForm.MainPanel.Width;
  SplashImage.Height := WizardForm.Bevel.Top;
  SplashImage.Parent := WizardForm.InnerPage;
  SplashImage.Stretch := True;
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'));
  SplashImage.Hide;
///////////////////////////////////////////////////////////

  URLLabel := TNewStaticText.Create(WizardForm);
  URLLabel.Caption := 'Special for Game-Torrent.info';
  URLLabel.Cursor := crHand;
  URLLabel.OnClick := @URLLabelOnClick;
  URLLabel.Parent := WizardForm;
  { Alter Font *after* setting Parent so the correct defaults are inherited first }
  URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
  URLLabel.Font.Color := clBlue;
  URLLabel.Top :=  330;
  URLLabel.Left := 30;

  ExtractTemporaryFile('Welcome.bmp')
  ExtractTemporaryFile('Finish.bmp')
  WizardForm.WizardSmallBitmapImage.Top:=0
  WizardForm.WizardSmallBitmapImage.Left:=0
  WizardForm.WizardSmallBitmapImage.Width:=498
  WizardForm.WizardSmallBitmapImage.Height:=58
  WizardForm.PageNameLabel.Visible:=false
  WizardForm.PageDescriptionLabel.Visible:=false
  WizardForm.FinishedLabel.Visible:=False
  WizardForm.FinishedHeadingLabel.Visible:=False
  WizardForm.WelcomeLabel1.Visible:=False
  WizardForm.WelcomeLabel2.Visible:=False
  Text := TNewStaticText.Create(WizardForm);
  Text.Top := 102;
  Text.Width := 332;
  Text.Height := 14;
  Text.Caption := 'Список жестких дисков и свободного места';
  Text.Parent := WizardForm.SelectDirPage;

  ListBox := TListBox.Create(WizardForm);
  ListBox.Top := 120;
  ListBox.Width := 332;
  ListBox.Height := ScaleY(90);
  ListBox.Parent := WizardForm.SelectDirPage;
  ListBox.OnClick := @ListBoxOnClick;
  ListBox.Font.Name := 'Courier New';
  ListBox.Font.Size := 10;
  ListBox.Font.Style := [fsBold];
  ListBox.Color := clBtnFace;

  drives := GetLogicalDrives();
  for i := 0 to 31 do
  begin
    if (drives and (1 shl i)) > 0 then
    begin
      Path := chr(ord('A') + i) + ':\';
      if GetDriveType(Path) = DRIVE_FIXED then
      begin
        GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
        if FreeMB>1024 then ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
        else ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + IntToStr(FreeMB) + ' MB');
      end;
    end;
  end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
  Path,s,z: String;
  FreeMB, TotalMB: Cardinal;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB < (NeedSize*1024) then
    begin
      if FreeMB>1024 then
      begin
      s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
      end
        else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
      MsgBox(s, mbCriticalError, MB_OK)
        Result := False;
    end;
    end;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
  Text: TNewStaticText;
  Windows,WindowsName: TMemo;
  Os,OS1,OS2,OS3,OS4,OS5,OS6,OS7,OS8,OS9,OS10,HARD: string; // строка с названием необходимой ОС
  ProcessorName: string;
  Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
  ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  ProcessorMHZ: Cardinal;
  StaticText: TNewStaticText;
  VidRam: integer;
  pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
    begin
      pfunc := WrapTimerProc(@OnTimer, 5);
      TimerID := SetTimer(0, 0, 1000, pfunc);

      WizardForm.InnerNotebook.Hide;
      WizardForm.Bevel1.Hide;
      WizardForm.MainPanel.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;
      URLLabel.Hide;

      WizardForm.ProgressGauge.Show;
      SplashImage.Show;
      WizardForm.StatusLabel.Show;

      WizardForm.CancelButton.Enabled :=True;
    end
  else
    begin
    URLLabel.Show;
    WizardForm.ProgressGauge.Hide;
    SplashImage.Hide;
    WizardForm.StatusLabel.Hide;
    //WizardForm.FilenameLabel.Hide;

    if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
    begin
      WizardForm.InnerNotebook.Show;
      WizardForm.Bevel1.Show;
      WizardForm.MainPanel.Show;
      WizardForm.PageNameLabel.Show;
      WizardForm.PageDescriptionLabel.Show;
    end;

    end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
  begin
  Image2:=TBitmapImage.Create(WizardForm)
 with Image2 do begin
  Left:=0
  Top:=0
  Width:=497
  Height:=313
  Parent:=WizardForm.FinishedPage
  Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
  end
  WizardForm.NextButton.Left:=380;
  WizardForm.NextButton.Top:=325;
 end
 //////////////////////////////
 If CurPageID=wpWelcome then
 begin
  If WizardForm.FindComponent('NextButton') is TButton
then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
  end
  begin
  Image1:=TBitmapImage.Create(WizardForm)
 with Image1 do begin
  Left:=0
  Top:=0
  Width:=497
  Height:=313
  Parent:=WizardForm.WelcomePage
  Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
  end
  end
  if CurPageID=wpSelectTasks then
 begin
  If WizardForm.FindComponent('NextButton') is TButton
then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
  If WizardForm.FindComponent('CancelButton') is TButton
then
  TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
  end
 if CurPageID = wpUserInfo then
  begin
  //подменяем сраницу информации о пользователе на информацию об ОС
    wizardForm.UserInfoNameEdit.visible:=false;
    wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
    wizardForm.UserInfoNameLabel.visible:=false;
    wizardForm.UserInfoOrgLabel.visible:=false;
    wizardForm.UserInfoOrgEdit.visible:=false;
    wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
    wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
    wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
    RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
    RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

  OS:=' Microsoft Windows XP Service Pack 2';
  OS10:=' Microsoft Windows XP Service Pack 3'; //строка является записью из реестра
  OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
  OS2:=' Windows Vista (TM) Ultimate ';
  OS3:=' Windows Vista (TM) Home Basic ';
  OS4:=' Windows Vista (TM) Home Premium ';
  OS5:=' Windows Vista (TM) Business ';
  OS6:=' Windows Vista (TM) Ultimate Service Pack 1'
  OS7:=' Windows Vista (TM) Home Basic Service Pack 1';
  OS8:=' Windows Vista (TM) Home Premium Service Pack 1';
  OS9:=' Windows Vista (TM) Business Service Pack 1';
  HARD:='Все компоненты удовлетворяют требованиям игры.';
  Windows := TMemo.Create(WizardForm);

  StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with StaticText do begin
    Left := 0;
    Top := 52;
    Width := 417;
    Height := 14;
    Caption := 'Все компоненты удовлетворяют требованиям игры.';
    Parent := WizardForm.UserInfoPage;
    StaticText.font.color:=clGreen;
  end


  with Windows do
  begin
    Text := ' Операц. система';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    Processor := TMemo.Create(WizardForm);
  with Processor do begin
    Text := ' Процессор';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    VideoCardPanel := TMemo.Create(WizardForm);
  with VideoCardPanel do begin
    Text := ' Видеоадаптер';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    AudioCardPanel := TMemo.Create(WizardForm);
  with AudioCardPanel do begin
    Text := ' Звуковая карта';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end
    RAMPanel := TMemo.Create(WizardForm);
  with RAMPanel do begin
    Text := ' ОЗУ';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

  end

  PageFilePanel := TMemo.Create(WizardForm);
  with PageFilePanel do begin
    Text := ' Файл подкачки';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

    ProcessorNamePanel := TMemo.Create(WizardForm);
  with ProcessorNamePanel do begin

    Text :=  DelSP(ProcessorName) + '  ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if ProcessorMHZ < 2800 then
  begin
    ProcessorNamePanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;

  VideoCardNamePanel := TMemo.Create(WizardForm);
  with VideoCardNamePanel do begin
    Text :=  ' ' + GetVideoCardName + 'MB'; //+'    ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
    Parent := WizardForm.UserInfoPage;
    VidrAM := GetVidMemLocal / 1000000;

    if VidRam > 127 then
    begin
      if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
      else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
      else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
      else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
    end;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if GetVidMemLocal < 255000000 then //128 MB
  begin
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
    VideoCardNamePanel.Color := $ccccff;
  end;


  end
    AudioCardNamePanel := TMemo.Create(WizardForm);
  with AudioCardNamePanel do begin
    Text := ' ' + GetSoundCardName;
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

    ReadOnly := True;

  end
    RAMTotalPanel := TMemo.Create(WizardForm);
  with RAMTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPhys + 1 < 1024 then
  begin
    RAMTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;

  PageFileTotalPanel := TMemo.Create(WizardForm);
  with PageFileTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPage) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPage < 1247 then
  begin
    PageFileTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;


  end

  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
  begin

    WindowsName := TMemo.Create(WizardForm);
    with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;
  end

  end

 end;

 // Проверка Windows 9x
  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
  begin
  WindowsName := TMemo.Create(WizardForm);
  with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end

  end;


  if OS=(WindowsName.Text) then state:=true else
  if OS2=(WindowsName.Text) then state:=true else
  if OS3=(WindowsName.Text) then state:=true else
  if OS4=(WindowsName.Text) then state:=true else
  if OS5=(WindowsName.Text) then state:=true else
  if OS6=(WindowsName.Text) then state:=true else
  if OS7=(WindowsName.Text) then state:=true else
  if OS8=(WindowsName.Text) then state:=true else
  if OS9=(WindowsName.Text) then state:=true else
  if OS10=(WindowsName.Text) then state:=true else
  if OS1=(WindowsName.Text) then state:=true else state:=false;

////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
  if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
  Text := TNewStaticText.Create(WizardForm);
    with Text do begin
    Left := 0;
    Top := 0;
    Width := 417;
    Height := 14;
    if state then
    begin
      Font.Color:=clGreen;
      WindowsName.color:=$CCFFCC;
    // SP_Num.color:=$CCFFCC;
      Caption := 'Операционная система соответствует требованиям игры.';
    end
    else
    begin
      Font.Color:=clREd;
      WindowsName.color:=clRed;

      WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
      WindowsName.Top := ScaleY(20);
      WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
      WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
      WindowsName.ReadOnly := True;



      Caption := 'Операционная система не соответствует требованиям игры.';
    end
    Parent := WizardForm.UserInfoPage;
  end
    Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with Text do begin
    Left := 0;
    Top := 220;
    Width := 417;
    Height := 14;
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
    Parent := WizardForm.UserInfoPage;
  end

 end;
end;

procedure DeInitializeSetup();
begin
 KillTimer(0, TimerID);
 BASS_Stop(); //нужно для остановки проигрывания
 BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;


tem000 26-02-2009 15:36 1049495

Serega_, еще пару вопросов. При создании инсталятора с несколькими прогами как исправить создание ярлыков на рабочем столе, при указании создать ярлык для какой то одной
почему то на столе появляются ярлыки всех программ. И по поводу секции CODE, как добавить чекбоксы для запуска по выбору всех 3 программ. HELP PLIZZZZ!!! Скрипт приложил
читать дальше »

[Setup]
AppName=Any FLV Player Pack
AppVerName=Any FLV Player Pack
AppPublisher=www.any-flv-player.com
DefaultDirName={pf}\Any FLV Player Pack
DefaultGroupName=Any FLV Player Pack
OutputBaseFilename=Any FLV Player Pack ©
AllowNoIcons=true
Compression=lzma
SolidCompression=true
VersionInfoVersion=1.1.3.1
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile=C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\embedded\Install.ico
UninstallDisplayIcon={app}\Uninstall\unins000.exe
UninstallFilesDir={app}\Uninstall

[Files]
;Any FLV Player
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any FLV Player 1.1.3.1\*"; DestDir: "{app}\Any FLV Player 1.1.3.1"; Components: Any_FLV_Player; MinVersion: 4.1,4.0; Flags: ignoreversion recursesubdirs createallsubdirs
;Any Video Converter Professional
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any Video Converter Pro 2.7.1\*"; DestDir: "{app}\Any Video Converter Pro 2.7.1"; Components: Any_Video_Converter; MinVersion: 4.1,4.0; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{userappdata}\Any Video Converter Professional\profiles_v2.xml"; DestDir: "{userappdata}\Any Video Converter Professional"; Flags: ignoreversion
;Any DVD Converter Professional
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any DVD Converter Pro 3.7.1.0\*"; DestDir: "{app}\Any DVD Converter Pro 3.7.1.0"; Components: Any_DVD_Converter; MinVersion: 4.1,4.0; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{userappdata}\Any DVD Converter Professional\profiles_v2.xml"; DestDir: "{userappdata}\Any DVD Converter Professional"; Flags: ignoreversion

[Registry]
;Any FLV Player
Root: HKCR; SubKey: Applications\FlvPlayer.exe\shell\open\command; ValueType: string; ValueName: ; ValueData: """C:\Program Files\Any FLV Player Pack\Any FLV Player 1.1.3.1\FlvPlayer.exe"" ""%1"""
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv; ValueType: string; ValueName: Application; ValueData: FlvPlayer.exe; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithList; ValueType: string; ValueName: a; ValueData: FlvPlayer.exe; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: flv_auto_file; ValueData: hex(0):; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: Winamp.File.FLV; ValueData: hex(0):; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: SWF.max.flv; ValueData: hex(0):; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: Flash.VideoFile; ValueData: hex(0):; Tasks: fileassoc
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: AutoPlay; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: AutoRepeat; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: ShowTitle; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: ShowTime; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlPanelPosition; ValueData: $00000000
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlPanelDisplay; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorControlPanel; ValueData: $00141414
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorButton; ValueData: $002525da
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorTime1; ValueData: $00ffffff
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorSlide; ValueData: $00f0f0f0
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorBufferSlide; ValueData: $00000000
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorBKSlide; ValueData: $00333333
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: CopyVideoFile; ValueData: $00000001
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nBufferTime; ValueData: $00000005
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlBarStyle; ValueData: $00000000
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: string; ValueName: language; ValueData: auto
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: string; ValueName: languageIni; ValueData: lang_rus.ini
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: languageAuto; ValueData: $00000000
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nSizeRatio; ValueData: $00000001
;Any Video Converter Professional
Root: HKCU; Subkey: "Software\Any Video Converter Professional"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "UseTitleAsFileName"; ValueType: Dword; ValueData: "$1";
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "Video Aspect"; ValueType: String; ValueData: "4/3";
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "RetryTimes"; ValueType: Dword; ValueData: "$5";
;Any DVD Converter Professional
Root: HKCU; Subkey: "Software\Any DVD Converter Professional"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Any DVD Converter Professional\Setting\Output"; ValueName: "UseTitleAsFileName"; ValueType: Dword; ValueData: "$1";
Root: HKCU; Subkey: "Software\Any DVD Converter Professional\Setting\Output"; ValueName: "RetryTimes"; ValueType: Dword; ValueData: "$5";

[Run]
;Any FLV Player
;Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe; Description: Запустить Any Flv Player; Flags: nowait postinstall skipifsilent unchecked
;Any Video Converter Professional
;Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe; Description: Запустить Any Video Converter Pro; Flags: nowait postinstall skipifsilent unchecked

[Icons]
;Any FLV Player
Name: {group}\Any Flv Player; Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe
Name: {commondesktop}\Any Flv Player; Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe; Tasks: desktopicon
;Any Video Converter Professional
Name: {group}\Any Video Converter Pro; Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe
Name: {commondesktop}\Any Video Converter Pro; Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe; Tasks: desktopicon
;Any DVD Converter Professional
Name: {group}\Any DVD Converter Pro; Filename: {app}\Any DVD Converter Pro 3.7.1.0\DVDConvPro.exe
Name: {commondesktop}\Any DVD Converter Pro; Filename: {app}\Any DVD Converter Pro 3.7.1.0\DVDConvPro.exe; Tasks: desktopicon

[Tasks]
Name: desktopicon; Description: Создать ярлык Any Flv Player на рабочем столе; GroupDescription: Дополнительные ярлыки:; Flags: unchecked
Name: desktopicon; Description: Создать ярлык Any Video Converter Pro на рабочем столе; GroupDescription: Дополнительные ярлыки:; Flags: unchecked
Name: desktopicon; Description: Создать ярлык Any DVD Converter Pro на рабочем столе; GroupDescription: Дополнительные ярлыки:; Flags: unchecked

Name: fileassoc; Description: Связать Any FLV Player, с файлами имеющими расширение .flv; MinVersion: 4.1,4.0; Flags: unchecked

[Components]
Name: Any_FLV_Player; Description: Any FLV Player 1.1.3.1; Types: full compact custom; MinVersion: 4.1,4.0
Name: Any_Video_Converter; Description: Any Video Converter Pro 2.7.1; Types: full; MinVersion: 4.1,4.0
Name: Any_DVD_Converter; Description: Any DVD Converter Pro 3.7.1.0; Types: full; MinVersion: 4.1,4.0

[Types]
Name: full; Description: Полная установка
Name: compact; Description: Компактная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Messages]
BeveledLabel=Copyright © 2009

[Languages]
Name: Russian; MessagesFile: embedded\Russian.isl

[code]
var
WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
RunMyProg: TCheckBox;

procedure RLabelOnClick(Sender: TObject);
begin
if RunMyProg.Checked=false then
begin
RunMyProg.Checked := true;
end else
RunMyProg.Checked := false;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssDone then
begin
if RunMyProg.Checked then
Exec(ExpandConstant('{app}\Any FLV Player 1.1.3.1\FlvPlayer.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
end;

procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
// не знаю почему, но Hide не действует. Поэтому просто уменьшил размер.
WizardForm.RunList.Height := 0;
WizardForm.RunList.Width := 0;

WizardForm.WizardBitmapImage.Align:=true;
WizardForm.WizardBitmapImage2.Align:=true;
WizardForm.WizardSmallBitmapImage.Align:=true;

WelcomeLabel1:=TLabel.Create(WizardForm);
WelcomeLabel1.Left:=ScaleX(150);
WelcomeLabel1.Top := ScaleY(22);
WelcomeLabel1.Width := ScaleX(320);
WelcomeLabel1.Height := ScaleY(75);
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом.
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Name:='Cambria';
WelcomeLabel1.Font.Size := 14;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm.WelcomePage;

WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := ScaleX(150);
WelcomeLabel2.Top := ScaleY(85);
WelcomeLabel2.Width := ScaleX(320);
WelcomeLabel2.Height := ScaleY(200);
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Font.Size := 8;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Parent := WizardForm.WelcomePage;

PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(35);
PageNameLabel.Top := ScaleY(13);
PageNameLabel.Width := ScaleX(300);
PageNameLabel.Height := ScaleY(14);
PageNameLabel.AutoSize := False;
PageNameLabel.WordWrap := True;
PageNameLabel.Font.Color := clBlack;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
PageNameLabel.Parent := WizardForm.MainPanel;

PageDescriptionLabel := TLabel.Create(WizardForm);
PageDescriptionLabel.Left := ScaleX(35);
PageDescriptionLabel.Top := ScaleY(30);
PageDescriptionLabel.Width := ScaleX(400);
PageDescriptionLabel.Height := ScaleY(30);
PageDescriptionLabel.AutoSize := False;
PageDescriptionLabel.WordWrap := True;
PageDescriptionLabel.Font.Color := clBlack;
PageDescriptionLabel.Transparent := True;
PageDescriptionLabel.Parent := WizardForm.MainPanel;

FinishedHeadingLabel:=TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(150);
FinishedHeadingLabel.Top := ScaleY(22);
FinishedHeadingLabel.Width := ScaleX(320);
FinishedHeadingLabel.Height := ScaleY(75);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Font.Color := clBlack;
// здесь можно поиграть шрифтом.
FinishedHeadingLabel.Font.Style := [fsBold];
FinishedHeadingLabel.Font.Name:='Cambria';
FinishedHeadingLabel.Font.Size := 14;
FinishedHeadingLabel.Transparent := True;
FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

FinishedLabel:=TLabel.Create(WizardForm);
FinishedLabel.Left := ScaleX(150);
FinishedLabel.Top := ScaleY(85);
FinishedLabel.Width := ScaleX(320);
FinishedLabel.Height := ScaleY(200);
FinishedLabel.AutoSize := False;
FinishedLabel.WordWrap := True;
FinishedLabel.Font.Color := clBlack;
FinishedLabel.Font.Size := 8;
FinishedLabel.Transparent := True;
FinishedLabel.Parent := WizardForm.FinishedPage;

RunMyProg := TCheckBox.Create(WizardForm);
RunMyProg.Parent := WizardForm.FinishedPage;
RunMyProg.Left := ScaleX(150);
RunMyProg.Top := ScaleY(185);
RunMyProg.Width := ScaleX(14);
RunMyProg.Height := ScaleX(14);
// RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

RunLabel:=TLabel.Create(WizardForm);
RunLabel.Left := ScaleX(170);
RunLabel.Top := ScaleY(185);
RunLabel.Width := ScaleX(200);
RunLabel.Height := ScaleY(20);
RunLabel.AutoSize := False;
RunLabel.WordWrap := True;
RunLabel.Font.Color := clBlack;
RunLabel.Font.Size := 8;
RunLabel.OnClick := @RLabelOnClick;
RunLabel.Transparent := True;
RunLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
RunLabel.Caption := 'Запустить Any Flv Player';
end;

Serega 26-02-2009 18:29 1049661

tem000,
читать дальше »
Код:

[Setup]
AppName=Any FLV Player Pack
AppVerName=Any FLV Player Pack
AppPublisher=www.any-flv-player.com
DefaultDirName={pf}\Any FLV Player Pack
DefaultGroupName=Any FLV Player Pack
OutputBaseFilename=Any FLV Player Pack ©
AllowNoIcons=true
Compression=lzma
SolidCompression=true
VersionInfoVersion=1.1.3.1
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile=C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\embedded\Install.ico
UninstallDisplayIcon={app}\Uninstall\unins000.exe
UninstallFilesDir={app}\Uninstall

[Languages]
Name: Russian; MessagesFile: embedded\Russian.isl

[Messages]
BeveledLabel=Copyright © 2009

[Types]
Name: full; Description: Полная установка
; compact - не определена отдельно, следовательно не нужна... имхо
Name: compact; Description: Компактная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: Any_FLV_Player; Description: Any FLV Player 1.1.3.1; Types: full compact custom; MinVersion: 4.1,4.0
Name: Any_Video_Converter; Description: Any Video Converter Pro 2.7.1; Types: full; MinVersion: 4.1,4.0
Name: Any_DVD_Converter; Description: Any DVD Converter Pro 3.7.1.0; Types: full; MinVersion: 4.1,4.0

[Tasks]
Name: AnyFlvPlayer; Description: Создать ярлык Any Flv Player на рабочем столе; GroupDescription: Дополнительные ярлыки:; Components: Any_FLV_Player; Flags: unchecked
Name: AnyVideoConverter; Description: Создать ярлык Any Video Converter Pro на рабочем столе; GroupDescription: Дополнительные ярлыки:; Components: Any_Video_Converter; Flags: unchecked
Name: AnyDVDConverter; Description: Создать ярлык Any DVD Converter Pro на рабочем столе; GroupDescription: Дополнительные ярлыки:; Components: Any_DVD_Converter; Flags: unchecked

Name: fileassoc; Description: Связать Any FLV Player, с файлами имеющими расширение .flv; MinVersion: 4.1,4.0; Components: Any_FLV_Player; Flags: unchecked

[Files]
Any FLV Player
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any FLV Player 1.1.3.1\*"; DestDir: "{app}\Any FLV Player 1.1.3.1"; Components: Any_FLV_Player; MinVersion: 4.1,4.0; Flags: ignoreversion recursesubdirs createallsubdirs
Any Video Converter Professional
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any Video Converter Pro 2.7.1\*"; DestDir: "{app}\Any Video Converter Pro 2.7.1"; MinVersion: 4.1,4.0; Components: Any_Video_Converter; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{userappdata}\Any Video Converter Professional\profiles_v2.xml"; DestDir: "{userappdata}\Any Video Converter Professional"; Components: Any_Video_Converter; Flags: ignoreversion
Any DVD Converter Professional
Source: "C:\Documents and Settings\Пользователь\Рабочий стол\Any FLV Player Pack\{app}\Any DVD Converter Pro 3.7.1.0\*"; DestDir: "{app}\Any DVD Converter Pro 3.7.1.0"; MinVersion: 4.1,4.0; Components: Any_DVD_Converter; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{userappdata}\Any DVD Converter Professional\profiles_v2.xml"; DestDir: "{userappdata}\Any DVD Converter Professional"; Components: Any_DVD_Converter; Flags: ignoreversion

[Registry]
Any FLV Player
Root: HKCR; SubKey: Applications\FlvPlayer.exe\shell\open\command; ValueType: string; ValueName: ; ValueData: """C:\Program Files\Any FLV Player Pack\Any FLV Player 1.1.3.1\FlvPlayer.exe"" ""%1"""; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv; ValueType: string; ValueName: Application; ValueData: FlvPlayer.exe; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithList; ValueType: string; ValueName: a; ValueData: FlvPlayer.exe; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: flv_auto_file; ValueData: hex(0):; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: Winamp.File.FLV; ValueData: hex(0):; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: SWF.max.flv; ValueData: hex(0):; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.flv\OpenWithProgids; ValueType: string; ValueName: Flash.VideoFile; ValueData: hex(0):; Components: Any_FLV_Player; Tasks: fileassoc
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: AutoPlay; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: AutoRepeat; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: ShowTitle; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: ShowTime; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlPanelPosition; ValueData: $00000000; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlPanelDisplay; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorControlPanel; ValueData: $00141414; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorButton; ValueData: $002525da; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorTime1; ValueData: $00ffffff; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorSlide; ValueData: $00f0f0f0; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorBufferSlide; ValueData: $00000000; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: colorBKSlide; ValueData: $00333333; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: CopyVideoFile; ValueData: $00000001; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nBufferTime; ValueData: $00000005; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nControlBarStyle; ValueData: $00000000; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: string; ValueName: language; ValueData: auto; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: string; ValueName: languageIni; ValueData: lang_rus.ini; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: languageAuto; ValueData: $00000000; Components: Any_FLV_Player
Root: HKCU; SubKey: Software\Any Flv Player; ValueType: dword; ValueName: nSizeRatio; ValueData: $00000001; Components: Any_FLV_Player
Any Video Converter Professional
Root: HKCU; Subkey: "Software\Any Video Converter Professional"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "UseTitleAsFileName"; ValueType: Dword; ValueData: "$1"; Components: Any_Video_Converter
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "Video Aspect"; ValueType: String; ValueData: "4/3"; Components: Any_Video_Converter
Root: HKCU; Subkey: "Software\Any Video Converter Professional\Setting\Output"; ValueName: "RetryTimes"; ValueType: Dword; ValueData: "$5"; Components: Any_Video_Converter
Any DVD Converter Professional
Root: HKCU; Subkey: "Software\Any DVD Converter Professional"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Any DVD Converter Professional\Setting\Output"; ValueName: "UseTitleAsFileName"; ValueType: Dword; ValueData: "$1"; Components: Any_DVD_Converter
Root: HKCU; Subkey: "Software\Any DVD Converter Professional\Setting\Output"; ValueName: "RetryTimes"; ValueType: Dword; ValueData: "$5"; Components: Any_DVD_Converter

[Run]
;Any FLV Player
;Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe; Description: Запустить Any Flv Player; Flags: nowait postinstall skipifsilent unchecked
;Any Video Converter Professional
;Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe; Description: Запустить Any Video Converter Pro; Flags: nowait postinstall skipifsilent unchecked

[Icons]
;Any FLV Player
Name: {group}\Any Flv Player; Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe; Components: Any_FLV_Player
Name: {commondesktop}\Any Flv Player; Filename: {app}\Any FLV Player 1.1.3.1\FlvPlayer.exe; Components: Any_FLV_Player; Tasks: AnyFlvPlayer
;Any Video Converter Professional
Name: {group}\Any Video Converter Pro; Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe; Components: Any_Video_Converter
Name: {commondesktop}\Any Video Converter Pro; Filename: {app}\Any Video Converter Pro 2.7.1\VideoConvPro.exe; Components: Any_Video_Converter; Tasks: AnyVideoConverter
;Any DVD Converter Professional
Name: {group}\Any DVD Converter Pro; Filename: {app}\Any DVD Converter Pro 3.7.1.0\DVDConvPro.exe; Components: Any_DVD_Converter
Name: {commondesktop}\Any DVD Converter Pro; Filename: {app}\Any DVD Converter Pro 3.7.1.0\DVDConvPro.exe; Components: Any_DVD_Converter; Tasks: AnyDVDConverter

[_Code]
var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,Any_FLV_Player_Label,Any_Video_Converter_Label,
  Any_DVD_Converter_Label,FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  Any_FLV_Player,Any_Video_Converter,Any_DVD_Converter: TCheckBox;

procedure Any_FLV_Player_Label_OnClick(Sender: TObject);
begin
  if Any_FLV_Player.Checked = false then
  begin
    Any_FLV_Player.Checked := true;
  end else
    Any_FLV_Player.Checked := false;
end;

procedure Any_Video_Converter_Label_OnClick(Sender: TObject);
begin
  if Any_Video_Converter.Checked = false then
  begin
    Any_Video_Converter.Checked := true;
  end else
    Any_Video_Converter.Checked := false;
end;

procedure Any_DVD_Converter_Label_OnClick(Sender: TObject);
begin
  if Any_DVD_Converter.Checked = false then
  begin
    Any_DVD_Converter.Checked := true;
  end else
    Any_DVD_Converter.Checked := false;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssDone then
  begin
    if Any_FLV_Player.Checked then
      Exec(ExpandConstant('{app}\Any FLV Player 1.1.3.1\FlvPlayer.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);

    if Any_Video_Converter.Checked then
      Exec(ExpandConstant('{app}\Any_Video_Converter\Any_Video_Converter.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);

    if Any_DVD_Converter.Checked then
      Exec(ExpandConstant('{app}\Any_DVD_Converter\Any_DVD_Converter.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;
  // не знаю почему, но Hide не действует. Поэтому просто уменьшил размер.
  WizardForm.RunList.Height := 0;
  WizardForm.RunList.Width := 0;

    WizardForm.WizardBitmapImage.Align:=true;
    WizardForm.WizardBitmapImage2.Align:=true;
    WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(22);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
  // здесь можно поиграть шрифтом.
  WelcomeLabel1.Font.Style := [fsBold];
  WelcomeLabel1.Font.Name:='Cambria';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

    WelcomeLabel2:=TLabel.Create(WizardForm);
    WelcomeLabel2.Left := ScaleX(150);
    WelcomeLabel2.Top := ScaleY(85);
    WelcomeLabel2.Width := ScaleX(320);
    WelcomeLabel2.Height := ScaleY(200);
    WelcomeLabel2.AutoSize := False;
    WelcomeLabel2.WordWrap := True;
    WelcomeLabel2.Font.Color := clBlack;
    WelcomeLabel2.Font.Size := 8;
    WelcomeLabel2.Transparent := True;
    WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(35);
  PageNameLabel.Top := ScaleY(13);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

    PageDescriptionLabel := TLabel.Create(WizardForm);
    PageDescriptionLabel.Left := ScaleX(35);
    PageDescriptionLabel.Top := ScaleY(30);
    PageDescriptionLabel.Width := ScaleX(400);
    PageDescriptionLabel.Height := ScaleY(30);
    PageDescriptionLabel.AutoSize := False;
    PageDescriptionLabel.WordWrap := True;
    PageDescriptionLabel.Font.Color := clBlack;
    PageDescriptionLabel.Transparent := True;
    PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(22);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
  // здесь можно поиграть шрифтом.
  FinishedHeadingLabel.Font.Style := [fsBold];
  FinishedHeadingLabel.Font.Name:='Cambria';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

    FinishedLabel:=TLabel.Create(WizardForm);
    FinishedLabel.Left := ScaleX(150);
    FinishedLabel.Top := ScaleY(85);
    FinishedLabel.Width := ScaleX(320);
    FinishedLabel.Height := ScaleY(200);
    FinishedLabel.AutoSize := False;
    FinishedLabel.WordWrap := True;
    FinishedLabel.Font.Color := clBlack;
    FinishedLabel.Font.Size := 8;
    FinishedLabel.Transparent := True;
    FinishedLabel.Parent := WizardForm.FinishedPage;

  Any_FLV_Player := TCheckBox.Create(WizardForm);
  Any_FLV_Player.Parent := WizardForm.FinishedPage;
  Any_FLV_Player.Left := ScaleX(150);
  Any_FLV_Player.Top := ScaleY(185);
  Any_FLV_Player.Width := ScaleX(14);
  Any_FLV_Player.Height := ScaleX(14);
  // Any_FLV_Player.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

    Any_FLV_Player_Label :=TLabel.Create(WizardForm);
    Any_FLV_Player_Label.Left := ScaleX(170);
    Any_FLV_Player_Label.Top := ScaleY(185);
    Any_FLV_Player_Label.Width := ScaleX(300);
    Any_FLV_Player_Label.Height := ScaleY(20);
    Any_FLV_Player_Label.AutoSize := False;
    Any_FLV_Player_Label.WordWrap := True;
    Any_FLV_Player_Label.Font.Color := clBlack;
    Any_FLV_Player_Label.Font.Size := 8;
    Any_FLV_Player_Label.OnClick := @Any_FLV_Player_Label_OnClick;
    Any_FLV_Player_Label.Transparent := True;
    Any_FLV_Player_Label.Parent := WizardForm.FinishedPage;

  Any_Video_Converter := TCheckBox.Create(WizardForm);
  Any_Video_Converter.Parent := WizardForm.FinishedPage;
  Any_Video_Converter.Left := ScaleX(150);
  Any_Video_Converter.Top := ScaleY(205);
  Any_Video_Converter.Width := ScaleX(14);
  Any_Video_Converter.Height := ScaleX(14);
  // Any_Video_Converter.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

    Any_Video_Converter_Label :=TLabel.Create(WizardForm);
    Any_Video_Converter_Label.Left := ScaleX(170);
    Any_Video_Converter_Label.Top := ScaleY(205);
    Any_Video_Converter_Label.Width := ScaleX(300);
    Any_Video_Converter_Label.Height := ScaleY(20);
    Any_Video_Converter_Label.AutoSize := False;
    Any_Video_Converter_Label.WordWrap := True;
    Any_Video_Converter_Label.Font.Color := clBlack;
    Any_Video_Converter_Label.Font.Size := 8;
    Any_Video_Converter_Label.OnClick := @Any_Video_Converter_Label_OnClick;
    Any_Video_Converter_Label.Transparent := True;
    Any_Video_Converter_Label.Parent := WizardForm.FinishedPage;

  Any_DVD_Converter := TCheckBox.Create(WizardForm);
  Any_DVD_Converter.Parent := WizardForm.FinishedPage;
  Any_DVD_Converter.Left := ScaleX(150);
  Any_DVD_Converter.Top := ScaleY(225);
  Any_DVD_Converter.Width := ScaleX(14);
  Any_DVD_Converter.Height := ScaleX(14);
  // Any_DVD_Converter.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

    Any_DVD_Converter_Label :=TLabel.Create(WizardForm);
    Any_DVD_Converter_Label.Left := ScaleX(170);
    Any_DVD_Converter_Label.Top := ScaleY(225);
    Any_DVD_Converter_Label.Width := ScaleX(300);
    Any_DVD_Converter_Label.Height := ScaleY(20);
    Any_DVD_Converter_Label.AutoSize := False;
    Any_DVD_Converter_Label.WordWrap := True;
    Any_DVD_Converter_Label.Font.Color := clBlack;
    Any_DVD_Converter_Label.Font.Size := 8;
    Any_DVD_Converter_Label.OnClick := @Any_DVD_Converter_Label_OnClick;
    Any_DVD_Converter_Label.Transparent := True;
    Any_DVD_Converter_Label.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
  // здесь придётся вручную вводить требуемый текст
  Any_FLV_Player_Label.Caption := 'Запустить Any Flv Player';
  Any_Video_Converter_Label.Caption := 'Запустить Any Video Converter Professional';
  Any_DVD_Converter_Label.Caption := 'Запустить Any DVD Converter Professional';
end;


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

tem000 26-02-2009 19:50 1049738

Serega_, Спасибо, работает!!!

Serega 01-03-2009 13:52 1051942

de_MAX, смещение прогрессбара вниз и показ слайд-шоу в окне мастера
читать дальше »
Код:

#define TIME_FOR_VIEW 1

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: 1.bmp; Flags: dontcopy
Source: 2.bmp; Flags: dontcopy
Source: 3.bmp; Flags: dontcopy
Source: InnoCallback.dll; Flags: dontcopy
Source: compiler:Examples\MyProg.exe; DestDir: {app}

Code]
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;
  TimerID: LongWord;
  currTime: Integer;
  SplashImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
  external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
  external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
  currTime := currTime + 1;
  case currTime of
  1*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp')) end;
  2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp')) end;
  end;
  if CurrTime = 2*{#TIME_FOR_VIEW} then CurrTime := -1;
end;

procedure RLabelOnClick(Sender: TObject);
begin
  if RunMyProg.Checked=false then
  begin
    RunMyProg.Checked := true;
  end else
    RunMyProg.Checked := false;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
if CurStep = ssDone then
  begin
    if RunMyProg.Checked then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('1.bmp')
  ExtractTemporaryFile('2.bmp')
  ExtractTemporaryFile('3.bmp')

  currTime := 0;

      WizardForm.WelcomeLabel1.Hide;
      WizardForm.WelcomeLabel2.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;
      WizardForm.FinishedHeadingLabel.Hide;
      WizardForm.FinishedLabel.Hide;
    // низнаю почему, но Hide не действует. Поэтому просто уменьшил размер
      WizardForm.RunList.Height := 0;
      WizardForm.RunList.Width := 0;
      WizardForm.FilenameLabel.Hide;

  WizardForm.StatusLabel.Parent := WizardForm;
  WizardForm.StatusLabel.Top := ScaleY(315);
  WizardForm.StatusLabel.Left := ScaleX(10);
  WizardForm.StatusLabel.Width := ScaleX(200);
  WizardForm.StatusLabel.Hide;

      WizardForm.ProgressGauge.Parent := WizardForm;
      WizardForm.ProgressGauge.Top := ScaleY(330);
      WizardForm.ProgressGauge.Left := ScaleX(10);
      WizardForm.ProgressGauge.Width := ScaleX(380);
      WizardForm.ProgressGauge.Height := ScaleX(18);
      WizardForm.ProgressGauge.Hide;

  SplashImage := TBitmapImage.Create(WizardForm);
  SplashImage.Top := 0;
  SplashImage.Left := 0;
  SplashImage.Width := WizardForm.MainPanel.Width;
  SplashImage.Height := WizardForm.Bevel.Top;
  SplashImage.Parent := WizardForm.InnerPage;
  SplashImage.Stretch := True;
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  SplashImage.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;

  RunMyProg := TCheckBox.Create(WizardForm);
  RunMyProg.Parent := WizardForm.FinishedPage;
  RunMyProg.Left := ScaleX(150);
  RunMyProg.Top := ScaleY(152);
  RunMyProg.Width := ScaleX(14);
  RunMyProg.Height := ScaleX(14);
//  RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

      RunLabel:=TLabel.Create(WizardForm);
      RunLabel.Left := ScaleX(170);
      RunLabel.Top := ScaleY(150);
      RunLabel.Width := ScaleX(200);
      RunLabel.Height := ScaleY(20);
      RunLabel.AutoSize := False;
      RunLabel.WordWrap := True;
      RunLabel.Font.Color := clBlack;
      RunLabel.Font.Size := 10;
      RunLabel.OnClick := @RLabelOnClick;
      RunLabel.Transparent := True;
      RunLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;

begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить программу';

  if (CurPageID = wpInstalling) then
    begin
      pfunc := WrapTimerProc(@OnTimer, 4);
      TimerID := SetTimer(0, 0, 1000, pfunc);

      WizardForm.InnerNotebook.Hide;
      WizardForm.Bevel1.Hide;
      WizardForm.MainPanel.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;

      WizardForm.ProgressGauge.Show;
      WizardForm.StatusLabel.Show;
      SplashImage.Show;
    end
  else
    begin
      WizardForm.ProgressGauge.Hide;
      WizardForm.StatusLabel.Hide;
      SplashImage.Hide;

    if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
    begin
      WizardForm.InnerNotebook.Show;
      WizardForm.Bevel1.Show;
      WizardForm.MainPanel.Show;
      WizardForm.PageNameLabel.Show;
      WizardForm.PageDescriptionLabel.Show;
    end;
  end;
end;

procedure DeinitializeSetup();
begin
  KillTimer(0, TimerID);
end;


mariolast 02-03-2009 23:11 1053273

Какой флаг поставить чтобы компилятор не выводил сообщение "No files matching ..." если задано
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
и папка WORK\ пустая, мне надо чтобы и пустые папки создавались при установке.

Serega 02-03-2009 23:21 1053280

mariolast, а более подробней. Не понятно, что вы хотите сделать? Какие пустые папки необходимо создать?
Цитата:

Цитата mariolast
и папка WORK\ пустая »

Это и есть ответ на ваш вопрос... т.е. вы пытаетесь скомпилировать пустую папку без файлов и папок, соответственно компилятор ругается: No files found matching "путь..."
Файлов то нет...

mariolast 02-03-2009 23:38 1053296

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

[Dirs]

Name: {app}\FAVORITES; Flags: uninsneveruninstall
Name: {app}\LOG; Flags: uninsneveruninstall
Name: {app}\NEWS; Flags: uninsneveruninstall
Name: {app}\OUTPUT; Flags: uninsneveruninstall
Name: {app}\SAVEARC; Flags: uninsneveruninstall
Name: {app}\SESSION; Flags: uninsneveruninstall
Name: {app}\TEXT_NEW; Flags: uninsneveruninstall
Name: {app}\USER; Flags: uninsneveruninstall

Но если в папках есть подпапки и они пустые и их много....может есть быстрое решение?

Serega 02-03-2009 23:46 1053302

mariolast, тогда в своём проекте перед компиляцией, создайте все эти папки в WORK\* и после этого можно компилировать с вашим первым вариантом...

mariolast 03-03-2009 00:16 1053320

А это отдельные папки, я для примера привел, Work в том числе, и вот пустую то папку как раз компилятор не создает, если в ней пусто...
Вот скрипт

[Files]
Source: F:\INSTALL\Liga\LOC_FILES\LOC_FILES\KEYFILES\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
Source: F:\INSTALL\Liga\LOC_FILES\LOC_FILES\UNINST\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
Source: F:\INSTALL\Liga\LOC_FILES\LOC_FILES\WORK\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs

[Dirs]

Name: {app}\FAVORITES; Flags: uninsneveruninstall
Name: {app}\LOG; Flags: uninsneveruninstall
Name: {app}\NEWS; Flags: uninsneveruninstall
Name: {app}\OUTPUT; Flags: uninsneveruninstall
Name: {app}\SAVEARC; Flags: uninsneveruninstall
Name: {app}\SESSION; Flags: uninsneveruninstall
Name: {app}\TEXT_NEW; Flags: uninsneveruninstall
Name: {app}\USER; Flags: uninsneveruninstall

Непустые папки компилятор берет, А вот пустые приходится в другую секцию переносить :(

boss911 03-03-2009 01:20 1053365

Цитата:

Цитата mariolast
Непустые папки компилятор берет, А вот пустые приходится в другую секцию переносить »

И не возьмет пустые. Создание пустых каталогов только через секцию [Dirs]. Не вижу проблемы в этом. Правда если пустых подкаталогов много, то придется помучиться, возможно, это как-то можно автоматизировать (облегчить) с помощью препроцессора, но тут я ничего сказать не могу.

Serega 03-03-2009 07:30 1053442

Цитата:

Цитата boss911
возможно, это как-то можно автоматизировать (облегчить) с помощью препроцессора »

а смысл, ведь всё равно вводить имена всех папок...

boss911 03-03-2009 17:43 1053932

Цитата:

Цитата Serega_
всё равно вводить имена всех папок... »

Имелось в виду, что код препроцессора в момент компиляции просканирует пустые каталоги и сгенерирует список в скрипт в тот же момент компиляции. Я видел немного похожий случай, даже проверял его, но только с файлами, так бы пришлось прописывать куча файлов, а так это делает за тебя препроцессор (составляет список в скрипт). Я не сильно в этом понимаю, но думаю, что для пустых каталогов можно было бы что-то придумать в этом духе.

mariolast 04-03-2009 14:15 1054728

Хм...мало что понял про препроцессор, что-то новенькое..
Еще вопрос.
Надо сделать возможность выбора при установке:

- Сетевая версия
- Локальная версия

И у каждого типа установки свои файлы и директории, в т.ч. и пустые. Но есть и общие.
Как это примерно реализовать?

Serega 04-03-2009 20:22 1055046

Цитата:

Цитата mariolast
Надо сделать возможность выбора при установке: »

Накидал вам два примера
читать дальше »
Код:

; 1 вариант, через [Components]

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Types]
Name: network; Description: Сетевая версия
Name: local; Description: Локальная версия; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: network; Flags: exclusive
Name: b; Description: Моя программа™64; Types: local; Flags: exclusive
Name: c; Description: Справка; Types: network local

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\MyProg-x64.exe; DestDir: {app}; Components: b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: c


; 2 вариант, через секцию [Tasks]

;[Setup]
;AppName=My Program
;AppVerName=My Program v 1.5
;DefaultDirName={pf}\My Program
;OutputDir=.

;[Languages]
;Name: russian; MessagesFile: compiler:Default.isl

;[Tasks]
;Name: network; Description: Сетевая версия; GroupDescription: Варианты установки:; Flags: exclusive
;Name: local; Description: Локальная версия; GroupDescription: Варианты установки:; Flags: exclusive

;[Files]
;Source: compiler:Examples\MyProg.exe; DestDir: {app}; Tasks: network
;Source: compiler:Examples\MyProg-x64.exe; DestDir: {app}; Tasks: local
;Source: compiler:Examples\MyProg.chm; DestDir: {app}


mariolast 08-03-2009 18:23 1058198

Serega_,
Все получилось, спасибо :)

Теперь еще задача, надо поставить эмулятор, подойдет ли для этого InnoSetup?

Сначала запускаю
hinstall.exe -i
Далее в зависимости от выбора пользователя ((local or network) заношу значения в реестр
Dump_Multikey_net.reg или Dump_Multikey_loc.reg
Далее ставлю сам эмулятор коммандой
devcon install multikey.inf root\multikey

Все пожалуй, файлов для всего этого 24 штуки, наверное где то в темповой папке надо распаковать а после установки удалить.
Или лучше не заморачиваться и делать все в коммандной строке?

Serega 08-03-2009 20:05 1058244

mariolast, сказать честно, я не знаю, что такое эмулятор, но запускать программы или установку других программ можно через секцию [Run]...

P.S.
Нашёл у себя в примерах скрипт, скорей всего это то, что вам надо
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program
;devcon install RAMDriv.inf RAMDriv

[Files]
Source: Files\FStarForce.sys; DestDir: {tmp}
Source: Files\dev000.inf; DestDir: {tmp}
Source: Files\devcon.exe; DestDir: {app}

[Run]
Filename: {app}\devcon.exe; Parameters: -r install {tmp}\dev000.inf 0; Flags: runhidden waituntilterminated

[UninstallRun]
Filename: {app}\devcon.exe; Parameters: " remove 0"; Flags: runhidden waituntilterminated


bish 08-03-2009 23:45 1058363

Цитата:

Цитата Mchik
Vadikan »

пора-бы обновить шапку:
на оффициале - 5.2.3 версия, и некоторые ссылки не рабочии.!

mariolast 09-03-2009 01:16 1058433

Делаю так

[Files]
Source: U:\INSTALL\Liga\HASP.drv\*; DestDir: {app}\haspdrv; Flags: ignoreversion recursesubdirs createallsubdirs
Source: U:\INSTALL\Liga\Emul\*; DestDir: {app}\MultiKey32; Flags: ignoreversion recursesubdirs createallsubdirs; components: local32 network32
Source: U:\INSTALL\Liga\Emul\MultiKey64\*; DestDir: {app}\MultiKey64; Flags: ignoreversion recursesubdirs createallsubdirs; components: local64 network64
[Run]

Filename: {app}\haspdrv\hinstall.exe; Parameters: -i; WorkingDir: {app}
Filename: {app}\MultiKey32\install.cmd; components: local32 network32; WorkingDir: {app}
Filename: {app}\MultiKey64\install.cmd; components: local64 network64; WorkingDir: {app}

[UninstallRun]
Filename: {app}\MultiKey32\remove.cmd; components: local32 network32; WorkingDir: {app}; Flags: runhidden waituntilterminated
Filename: {app}\MultiKey64\remove.cmd; components: local64 network64; WorkingDir: {app}; Flags: runhidden waituntilterminated

[UninstallDelete]
Type: files; Name: {win}\system32\drivers\multikey.sys
Type: filesandordirs; Name: {app}

install.cmd и remove.cmd это батники, запускаются с папок MultiKey32\ или MultiKey64\

Не работает скрипт при вызове комманд из батника, видимо надо его запускать прямо из папки MultiKey32\. Можно как то это реализовать?

Вроде так получилось
....
Filename: {app}\haspdrv\hinstall.exe; Parameters: -i; WorkingDir: {app}\haspdrv
Filename: {app}\MultiKey32\install.cmd; components: local32 network32; WorkingDir: {app}\MultiKey32\
Filename: {app}\MultiKey64\install.cmd; components: local64 network64; WorkingDir: {app}\MultiKey64\
...

de_MAX 12-03-2009 16:21 1061799

Может, кто знает или есть пример. В общем, задача следующая:
нужно сделать второй прогрессбар для отображения распаковки архивов freearc (возможно с использованием precomp). "RePack'ов" появляется очень много, а вот найти скрипт с использованием подобного не получается...

Serega 14-03-2009 23:11 1064060

de_MAX, для freearc или precomp не встречал, а если для распаковки архивов 7z, то есть библиотека is7z.dll, для показа хода распаковки 7z архивов во втором прогрессбаре. Инструкция и пример использования в архиве.

dissasminno 15-03-2009 20:47 1064846

Если Вы хотите получить исходный текст секции Code установочного скрипта любого инсталлятора сделанного с помощью Inno Setup, присылайте инсталлятор (либо ссылку на него).
Исходные тексты Code готовы к немедленной компиляции и дают 100% совпадение с оригиналом exe.

katok888 15-03-2009 21:06 1064860

dissasminno, интересно, а без мыла можно обойтись?

Serega 15-03-2009 21:31 1064893

dissasminno, т.е. вы хотите сказать, что (скорей всего за небольшую сумму денег) вы готовы извлечь секцию [code] в работоспособном состоянии? Есть программы с помощью которых можно узнать, что именно инсталлятор должен сделать из секции [code], но это будет понятно только тому, кто разбирается в программировании... Поэтому извлечь работоспособный код невозможно, а поэтому лохотрон разводить не надо...

Diman19 16-03-2009 02:18 1065134

Всем привет!Скажите пожалуйста как при создании выбора компонентов указать на один компонент несколько файлов?И если выбран компонент то эти файлы будут копироваться в указанную папку где они и должны быть?а если компонент не выбран при установке то они не будут копироваться.

Вот пример скрипта.

Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

Также хотелось бы узнать как на компонент установить на разные типы установки разные флаги?

Спасибо.

Serega 16-03-2009 08:09 1065200

Цитата:

Цитата Diman19
как при создании выбора компонентов указать на один компонент несколько файлов? »

читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: b; Description: Примеры скриптов; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\MyDll.dll; DestDir: {app}; Components: a
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a
Source: compiler:Examples\*.iss; DestDir: {app}; Components: b



Цитата:

Цитата Diman19
Также хотелось бы узнать как на компонент установить на разные типы установки разные флаги? »

в секции [Types], можно указать только один флаг - iscustom.
А что конкретно вы хотите сделать?

de_MAX 16-03-2009 11:10 1065301

Цитата:

Цитата Serega_
de_MAX, для freearc или precomp не встречал, а если для распаковки архивов 7z, то есть библиотека is7z.dll, для показа хода распаковки 7z архивов во втором прогрессбаре. Инструкция и пример использования в архиве.

Про 7-Zip знаю, думал, знаете про технику с freearc'ом, но все ровно спасибо.

MrLD 18-03-2009 14:57 1067285

Вопрос, существует ini файл такого вида
[***]
ConStr=Provider=***.1;Data Source=***;Initial Catalog=***

Мне необходимо изменить параметры Data Source и Initial Catalog при запуске инсталяции приложения. Создается окно с возможностью ввода этих параметров ( реализовано ). Теперь проблема: дело в том что inno setup понимает параметры записанные в каждой строке отдельно. Т.е. мне необходимо разбить строку на отдельные компоненты, изменить их и собрать снова а затем записать в ini. Как это сделать в [code] или существует другой путь?

Serega 18-03-2009 16:09 1067359

MrLD, а нельзя ли просто сразу вводить данные в том виде, в котором затем записывать, чтоб не заморачиваться с разбиением строки?

MrLD 18-03-2009 16:21 1067370

Нет, если я правильно понял о чем ты говоришь, дело в том что программа распознает только такую запись (строкой) в ini. А изменения в программу вносить нельзя. Так бы я сам изменил интерпретацию и все. а лезть в код запретили. А inno только с отдельными строками явно работает. Как это обойти.... ??

Serega 18-03-2009 17:26 1067418

MrLD, а инишник обязательно сохранять, может просто заново создать текстовый файл, только с расширением .ini?
SaveStringToFile(ExpandConstant('{app}\main.ini'), 'текст.....' + #13, true);

tem000 18-03-2009 23:44 1067789

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

Serega 19-03-2009 00:20 1067812

tem000, добавьте в секцию [Setup]
.......
ChangesAssociations=yes
........

MrLD 19-03-2009 09:57 1068025

Serega_, Можно конечно и создать. (уже пробовал).. только вот у меня задача при инсталяции изменить значение параметров в строке... а я не могу задать сразу несколько key для одного ini. Т.е. приходиться представлять для пользователя поле ввода куда ему надо записывать примерно следующее: Data Source=111;Initial Catalog=222
(ConStr=Provider=***;Data Source=111;Initial Catalog=222) а надо при установке (в появившемся окне) вносить изменения значения 111 и 222. Если бы data Source и initial catalog записывались каждый в своей строке вопроса не было бы. А вот как мне вытащить 111 и 222 (параметры data Source и initial catalog ) из строки а потом вставить их обратно измененными.... вот в чем вопрос.

Serega 19-03-2009 10:14 1068049

MrLD, а разве нельзя сделать, несколько полей ввода, чтоб разделить данные? Просто я как понял данные 111 и 222 у всех должны быть разные, ну и сделайте отдельное поля для данных 111 и для 222...
В противном случае вам необходимо читать строку посимвольно, а как это делать я пока не знаю... я только учусь :wink:...

MrLD 19-03-2009 10:34 1068081

Serega_, ))) Я так и сделал... поля ввода для 111 и 222 отдельные т.е. когда инсталяция завершена в ini файле отображается следующее
1. Если создаю ini:
Data Source = 111
Initial Catalog = 222

2. Если изменяю ini:
ConStr=Provider=***;Data Source=***;Initial Catalog=***

Data Source = 111
Initial Catalog = 222
Как видно inno setup при записи все время пытается записать параметры в отдельные строки. а при изменении не изменяет уже существующие параметры а добавляет те же но во все те же отдельные строки. Т.е. key для ini может быть только один (тот что первый (ConStr)). Мне набросал знакомый код по разбиению строки на отдельные параметры и дальнейшей ее сборки обратно в строку. только вот у меня не получается ее реализовать в [code].
Заранее извиняюсь за обьем сообщения может еще кто что посоветует? ))
читать дальше »

Код:

unit FrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button3: TButton;
    Edit6: TEdit;
    Button4: TButton;
    Edit7: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    FIntegrSecurity : String;
    FPersistSecInfo : String;
    FInitialCatalog : String;
    FDataSource    : String;
    FProvider      : String;

    procedure ParseStr(const AStr: String; var AProvider, AIntegrSecurity,
      APersistSecInfo, AInitialCatalog, ADataSource: String);
//    procedure CombineStr(var AStr: String; const AProvider, AIntegrSecurity,
//      APersistSecInfo, AInitialCatalog, ADataSource: String);
    procedure CombineStr(var AStr: String; const AProvider,
      AInitialCatalog, ADataSource: String);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  SIntegrSecurity = 'Integrated Security';
  SPersistSecInfo = 'Persist Security Info';
  SInitialCatalog = 'Initial Catalog';
  SDataSource    = 'Data Source';
  SProvider      = 'Provider';
  SDelim          = ';';
  SEqual          = '=';


procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
  S: String;
begin
  Ini := TIniFile.Create('c:\a.ini');
  try
    S := Ini.ReadString('CONNECT', 'ConStr', '');
    Edit6.Text := S;
  finally
    if Assigned(Ini) then Ini.Free;
  end;
end;

{
procedure TForm1.CombineStr(var AStr: String; const AProvider,
  AIntegrSecurity, APersistSecInfo, AInitialCatalog, ADataSource: String);
begin
  AStr := Format('%s=%s;%s=%s;%s=%s;%s=%s;%s=%s', [SProvider, AProvider,
    SIntegrSecurity, AIntegrSecurity, SPersistSecInfo, APersistSecInfo,
    SInitialCatalog, AInitialCatalog, SDataSource, ADataSource]);
end;
}

procedure TForm1.CombineStr(var AStr: String; const AProvider,
      AInitialCatalog, ADataSource: String);
begin
  AStr := Format('%s=%s;%s=%s;%s=%s', [SProvider, AProvider,
    SInitialCatalog, AInitialCatalog, SDataSource, ADataSource]);
end;

procedure TForm1.ParseStr(const AStr: String; var AProvider,
  AIntegrSecurity, APersistSecInfo, AInitialCatalog, ADataSource: String);
  procedure ExtractParamAndValue(const Str: String; var Param, Value: String);
  var
    I: Integer;
  begin
    Param := ''; Value := '';
    I := Pos(SEqual, Str);
    if (I > 0) and (I < Length(Str)) then
    begin
      Param := copy(Str, 1, I - 1);
      Value := copy(Str, I + 1, MAXINT);
    end;
  end;

var
  I: Integer;
  S, S1, S2: String;
begin
  S := AStr;
  repeat
    I := Pos(SDelim, S);
    if I > 0 then
    begin
      ExtractParamAndValue(copy(S, 1, I - 1), S1, S2);
      S := copy(S, I + 1, MAXINT);
    end
    else
    begin
      ExtractParamAndValue(S, S1, S2);
      S := '';
    end;

    if S1 = SProvider      then FProvider      := S2 else
    if S1 = SIntegrSecurity then AIntegrSecurity := S2 else
    if S1 = SPersistSecInfo then APersistSecInfo := S2 else
    if S1 = SInitialCatalog then AInitialCatalog := S2 else
    if S1 = SDataSource    then ADataSource    := S2;

  until I <= 0
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ParseStr(Edit6.Text, FProvider, FIntegrSecurity, FPersistSecInfo,
    FInitialCatalog, FDataSource);
  Edit1.Text := FProvider;
  Edit2.Text := FIntegrSecurity;
  Edit3.Text := FPersistSecInfo;
  Edit4.Text := FInitialCatalog;
  Edit5.Text := FDataSource;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  S: String;
begin
  self.CombineStr(S, Edit1.Text, Edit5.Text, Edit4.Text);
  Edit7.Text := S;
end;

end.


Serega 19-03-2009 10:55 1068104

Цитата:

Цитата MrLD
Заранее извиняюсь за обьем сообщения »

используйте тег [more]
Цитата:

Цитата MrLD
inno setup при записи все время пытается записать параметры в отдельные строки »

так вобще-то это правильно ведь инишник никогда не пишется в одну строку, одним словом неправильный у вас инишник...
Цитата:

Цитата MrLD
Мне набросал знакомый код »

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

MrLD 19-03-2009 11:47 1068160

Я уже писал что инишник не правельный... а в программу лезть запретили чтоб поменять интерпретацию ((( вот так (( Если чего разберешь дай знать )) очень надеюсь... а то работа встала... сам уже 4-й день бьюсь...

Serega 19-03-2009 11:51 1068165

MrLD, а вы этот код на делфи проверяли на работоспасобность? А то я собрал, накидал на форму кнопки и едиты, а он не пашет, главно и не ругается, т.е вообще ничего не происходит... Если не сложно скиньте полный исходник посмотреть, можно в PM...

MrLD 19-03-2009 11:58 1068176

там надо создать ini и внести в него секцию [Connect] и запись в виде строки которую я приводил в пример.

[Connect]
ConStr=Provider=***;Data Source=***;Initial Catalog=***



и путь прописать к инишнику

Цитата:

Цитата MrLD
procedure TForm1.Button1Click(Sender: TObject);
var
Ini: TIniFile;
S: String;
begin
Ini := TIniFile.Create('c:\a.ini');
try
S := Ini.ReadString('CONNECT', 'ConStr', '');
Edit6.Text := S;
finally
if Assigned(Ini) then Ini.Free;
end;
end; »


Serega 19-03-2009 21:33 1068727

MrLD, ну, что обрадовать вас?
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DisableProgramGroupPage=yes
CreateUninstallRegKey=no
DisableDirPage=yes
CreateAppDir=no
Uninstallable=no
DisableFinishedPage=yes
DisableReadyPage=yes
OutputBaseFilename=My Program
OutputDir=.

Code]
const
  SIntegrSecurity = 'Integrated Security';
  SPersistSecInfo = 'Persist Security Info';
  SInitialCatalog = 'Initial Catalog';
  SDataSource = 'Data Source';
  SProvider = 'Provider';
  SDelim = ';';
  SEqual = '=';

var
  Form: TForm;
  lbl1, lbl2, lbl3, lbl4, lbl5, lbl6, lbl7: TLabel;
  btn1, btn2, btn3, btn4: TButton;
  edt1, edt2, edt3, edt4, edt5, edt6, edt7: TEdit;
  FIntegrSecurity, FPersistSecInfo, FInitialCatalog,
  FDataSource, FProvider : String;

procedure btn2Click(Sender: TObject);
begin
  Form.Close;
end;

procedure btn1Click(Sender: TObject);
var
  S: String;
begin
  S:= GetIniString('CONNECT', 'ConStr', '', 'c:\a.ini');
  edt6.Text:= S;
end;

procedure CombineStr(var AStr: String; const AProvider,
  AInitialCatalog, ADataSource: String);
begin
  AStr:= Format('%s=%s;%s=%s;%s=%s', [SProvider, AProvider,
        SInitialCatalog, AInitialCatalog, SDataSource, ADataSource]);
end;

procedure ExtractParamAndValue(const Str: String; var Param, Value: String);
var
  I: Integer;
begin
  Param:= '';
  Value:= '';
  I:= Pos(SEqual, Str);
  if (I > 0) and (I < Length(Str)) then
  begin
    Param:= copy(Str, 1, I - 1);
    Value:= copy(Str, I + 1, MAXINT);
  end;
end;

procedure ParseStr(const AStr: String; var AProvider,
    AIntegrSecurity, APersistSecInfo, AInitialCatalog, ADataSource: String);
var
  I: Integer;
  S, S1, S2: String;
begin
  S:= AStr;
  repeat
    I:= Pos(SDelim, S);
    if I > 0 then
    begin
      ExtractParamAndValue(copy(S, 1, I - 1), S1, S2);
      S:= copy(S, I + 1, MAXINT);
    end else
  begin
    ExtractParamAndValue(S, S1, S2);
    S:= '';
  end;

  if S1 = SProvider then FProvider:= S2 else
  if S1 = SIntegrSecurity then AIntegrSecurity:= S2 else
  if S1 = SPersistSecInfo then APersistSecInfo:= S2 else
  if S1 = SInitialCatalog then AInitialCatalog:= S2 else
  if S1 = SDataSource then ADataSource:= S2;

  until I <= 0
end;

procedure btn3Click(Sender: TObject);
begin
  ParseStr(edt6.Text, FProvider, FIntegrSecurity, FPersistSecInfo,
          FInitialCatalog, FDataSource);
  edt1.Text:= FProvider;
  edt2.Text:= FIntegrSecurity;
  edt3.Text:= FPersistSecInfo;
  edt4.Text:= FInitialCatalog;
  edt5.Text:= FDataSource;
end;

procedure btn4Click(Sender: TObject);
var
  S: String;
begin
  CombineStr(S, edt1.Text, edt5.Text, edt4.Text);
  edt7.Text:= S;
end;

procedure CreateComponents;
begin
  Form:= TForm.Create(Application);
  try
    Form.ClientWidth:= 345;
    Form.ClientHeight:= 300;
    Form.Caption:= 'Пример';
    Form.Position:= poScreenCenter;
    Form.Color:= clBtnFace;
    Form.Font.Color:= clWindowText;
    Form.Font.Height:= -11;
    Form.Font.Name:= 'MS Sans Serif';
    Form.Font.Style:= [];
    Form.PixelsPerInch:= 96;

      //lbl1
      lbl1:= TLabel.Create(Form);
      lbl1.Parent:= Form;
      lbl1.Left:= 24;
      lbl1.Top:= 8;
      lbl1.Width:= 86;
      lbl1.Height:= 13;
      lbl1.Caption:= 'Секция [Connect]';

    //lbl2
    lbl2:= TLabel.Create(Form);
    lbl2.Parent:= Form;
    lbl2.Left:= 24;
    lbl2.Top:= 48;
    lbl2.Width:= 39;
    lbl2.Height:= 13;
    lbl2.Caption:= 'Provider';

      //lbl3
      lbl3:= TLabel.Create(Form);
      lbl3.Parent:= Form;
      lbl3.Left:= 24;
      lbl3.Top:= 88;
      lbl3.Width:= 60;
      lbl3.Height:= 13;
      lbl3.Caption:= 'Data Source';

    //lbl4
    lbl4:= TLabel.Create(Form);
    lbl4.Parent:= Form;
    lbl4.Left:= 24;
    lbl4.Top:= 128;
    lbl4.Width:= 63;
    lbl4.Height:= 13;
    lbl4.Caption:= 'Initial Catalog';

      //lbl5
      lbl5:= TLabel.Create(Form);
      lbl5.Parent:= Form;
      lbl5.Left:= 24;
      lbl5.Top:= 168;
      lbl5.Width:= 68;
      lbl5.Height:= 13;
      lbl5.Caption:= 'Integr Security';

    //lbl6
    lbl6:= TLabel.Create(Form);
    lbl6.Parent:= Form;
    lbl6.Left:= 24;
    lbl6.Top:= 208;
    lbl6.Width:= 71;
    lbl6.Height:= 13;
    lbl6.Caption:= 'Persist SecInfo';

      //lbl7
      lbl7:= TLabel.Create(Form);
      lbl7.Parent:= Form;
      lbl7.Left:= 24;
      lbl7.Top:= 248;
      lbl7.Width:= 54;
      lbl7.Height:= 13;
      lbl7.Caption:= 'CombineStr';

    //btn1
    btn1:= TButton.Create(Form);
    btn1.Parent:= Form;
    btn1.Left:= 240;
    btn1.Top:= 64;
    btn1.Width:= 75;
    btn1.Height:= 22;
    btn1.Caption:= 'Читать';
    btn1.TabOrder:= 0;
    btn1.OnClick:= @btn1Click;
    btn1.Cursor:= crHand;
    btn1.ShowHint:=True;
    btn1.Hint:='Читать секцию [Connect] из файла';

      //btn2
      btn2:= TButton.Create(Form);
      btn2.Parent:= Form;
      btn2.Left:= 240;
      btn2.Top:= 176;
      btn2.Width:= 75;
      btn2.Height:= 22;
      btn2.Caption:= 'Закрыть';
      btn2.TabOrder:= 1;
      btn2.OnClick:= @btn2Click;
      btn2.Cursor:= crHand;
      btn2.ShowHint:=True;
      btn2.Hint:='Закрыть и продолжить установку';

    //btn3
    btn3:= TButton.Create(Form);
    btn3.Parent:= Form;
    btn3.Left:= 240;
    btn3.Top:= 96;
    btn3.Width:= 75;
    btn3.Height:= 22;
    btn3.Caption:= 'Разделить';
    btn3.TabOrder:= 2;
    btn3.OnClick:= @btn3Click;
    btn3.Cursor:= crHand;
    btn3.ShowHint:=True;
    btn3.Hint:='Разделить строку на данные';

      //btn4
      btn4:= TButton.Create(Form);
      btn4.Parent:= Form;
      btn4.Left:= 240;
      btn4.Top:= 128;
      btn4.Width:= 75;
      btn4.Height:= 22;
      btn4.Caption:= 'Объединить';
      btn4.TabOrder:= 3;
      btn4.OnClick:= @btn4Click;
      btn4.Cursor:= crHand;
      btn4.ShowHint:=True;
      btn4.Hint:='Объединить изменённые данные';

    //edt1
    edt1:= TEdit.Create(Form);
    edt1.Parent:= Form;
    edt1.Left:= 24;
    edt1.Top:= 64;
    edt1.Width:= 200;
    edt1.Height:= 21;
    edt1.TabOrder:= 4;

      //edt2
      edt2:= TEdit.Create(Form);
      edt2.Parent:= Form;
      edt2.Left:= 24;
      edt2.Top:= 184;
      edt2.Width:= 200;
      edt2.Height:= 21;
      edt2.TabOrder:= 5;

    //edt3
    edt3:= TEdit.Create(Form);
    edt3.Parent:= Form;
    edt3.Left:= 24;
    edt3.Top:= 224;
    edt3.Width:= 200;
    edt3.Height:= 21;
    edt3.TabOrder:= 6;

      //edt4
      edt4:= TEdit.Create(Form);
      edt4.Parent:= Form;
      edt4.Left:= 24;
      edt4.Top:= 144;
      edt4.Width:= 200;
      edt4.Height:= 21;
      edt4.TabOrder:= 7;

    //edt5
    edt5:= TEdit.Create(Form);
    edt5.Parent:= Form;
    edt5.Left:= 24;
    edt5.Top:= 104;
    edt5.Width:= 200;
    edt5.Height:= 21;
    edt5.TabOrder:= 8;

      //edt6
      edt6:= TEdit.Create(Form);
      edt6.Parent:= Form;
      edt6.Left:= 24;
      edt6.Top:= 24;
      edt6.Width:= 289;
      edt6.Height:= 21;
      edt6.TabOrder:= 9;

    //edt7
    edt7:= TEdit.Create(Form);
    edt7.Parent:= Form;
    edt7.Left:= 24;
    edt7.Top:= 264;
    edt7.Width:= 297;
    edt7.Height:= 21;
    edt7.TabOrder:= 10;

    Form.ShowModal;

  finally
    Form.Free;
  end;
end;

procedure InitializeWizard;
begin
  CreateComponents;
end;


MrLD 20-03-2009 15:44 1069398

Serega_, ((( не работает ((

MrLD 20-03-2009 16:12 1069424

Serega_У тебя этот код работает?

Serega 20-03-2009 16:15 1069425

MrLD, естественно... иначе бы не давал.

MrLD 20-03-2009 16:33 1069435

Serega_, У тебя tool- зы какиенить установленны?? а то у меня inno Application не понимает ((

Serega 20-03-2009 16:34 1069437

MrLD,
Установите себе ispack-5.2.3, упс уже вышло обновление, версия ispack-5.2.4-dev, сейчас скачаю, а также расширенную версию от Restools, которая добавляет много возможностей для инсталляторов...

P.S.
буду через час...


Забыл уточнить. Сначала нужно установить ispack, а затем обновить путём замены файлов от Restools.

Diman19 20-03-2009 17:02 1069460

Всем привет!Скажите пожалуйста как при выборе компонентов указать в какую папку копировать выбранные компоненты?Также интересует вопрос в том как сделать так чтобы если выбираешь один компонент,копируется файл с одним содержанием,а если выбираешь другой компонент или если компонент не выбирать,то копируется файл с таким же именет но только с другим содержанием внутри.Скажите пожалуйста как так сделать.

Serega 20-03-2009 17:27 1069492

Diman19,
пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b


Diman19 21-03-2009 20:32 1070569

Всем привет!Всем спасибо кто отвечает и помогает.Прошу помочь с маленькой проблемой.При создании исталлятора не работаю чекбоксы которые должны копировать файлы в папку если они помечены.Пишу код следующим образом

Name: programfiles; Description: Файлы программы; Types: full custom; Flags: fixed
Name: files; Description: Доп.файлы; Types: full
Name: plugins; Description: Плагины; Types: full custom
Name: "plugins\plugin1"; Description: "plugin1";



это путь к файлу запуска
Source: "C:\myprogram\myprogram.exe"; DestDir: "{app}"; Flags: ignoreversion
Это путь ко всем папкам и файлам.Тоестьв этой папке лежат файлы и папки программы.
Source: "C:\myprogram\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: programfiles

здесь я указываю путь к файлам плагина.

Source: "C:\myprogram\other\plugis\plugin1.exe"; DestDir: {app}; Components: plugins\plugin1

Source: "C:\myprogram\other\plugins\plugin1.txt"; DestDir: {app}; Components: plugins\plugin1

Проблема возникла в том что если во время установки не установить чекбоксы на плугины,то они всё равно устанавливаются незнаю почему.Скажите пожалуйста где я допустил ошибку?Может путь неправильно к файлам программы указал?Указывал папку со всеми файлами.Помогите пожалуйста разобраться

Serega 21-03-2009 20:43 1070580

Diman19, я ничего не понял, покажите скрипт полностью и используйте тег [ more][/more], чтоб ваше сообщение не было объёмным...

Diman19 22-03-2009 12:09 1070949

Serega_,

Ок Вот полный скрипт.

читать дальше »

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Myprogram"
#define MyAppVerName "Myprogram 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "myprogram.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={{5EEBB548-ED74-4FFF-9D6D-BE4A6C859BA4}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
LicenseFile=C:\myprogram\readme.txt
OutputDir=C:\Documents and Settings\Дима\My Documents
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ComponentsListTVStyle=true

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

[Types]
Name: full; Description: Полная установка
Name: recomend; Description: Рекомендуемая установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: programfiles; Description: Файлы программы™; Types: full recomend custom; Flags: fixed
Name: source; Description: Исходники; Types: full
Name: plugins; Description: Плагины; Types: full recomend custom
Name: "plugins\Plugin1"; Description: "Plugin1";



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

[Files]
Source: "C:\myprogram\myprogram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\myprogram\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: programfiles
Source: "C:\myprogram\other\plugins\plugin1.exe"; DestDir: {app}; Components: plugins\Plugin1
Source: "C:\myprogram\other\plugins\plugin1.txt"; DestDir: {app}; Components: plugins\Plugin1

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

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

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent

Serega 22-03-2009 15:24 1071034

Diman19, добавьте Excludes: plugin1.exe, plugin1.txt
читать дальше »
Код:

......................................
Source: C:\myprogram\*; DestDir: {app}; Excludes: plugin1.exe, plugin1.txt; Flags: ignoreversion recursesubdirs createallsubdirs; Components: programfiles
Source: C:\myprogram\other\plugins\plugin1.exe; DestDir: {app}; Components: plugins\Plugin1; Flags: ignoreversion
Source: C:\myprogram\other\plugins\plugin1.txt; DestDir: {app}; Components: plugins\Plugin1; Flags: ignoreversion
......................................


Serega 22-03-2009 21:34 1071300

Здравствуйте, решил реализовать в Inno Setup 'Бегущую строку' и вот, что получилось...
читать дальше »
Код:

; Решил реализовать в Inno Setup 'Бегущую строку' и вот, что получилось...
; Для нормальной работы у Вас должен быть установлен набор от Restools http://restools.hanzify.org/
; Подразумеваю под словом набор - InnoCompiler и ISCmplr, последние версии Вы можете найти на сайте Restools.
; Автор: Serega, http://forum.oszone.net/member.php?userid=88670

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[_Code]
var
  lbl1: TLabel;
  tmr1: TTimer;

procedure tmr1Timer(Sender: TObject);
var
  str: string;
begin
  str:= lbl1.Caption;
  lbl1.Caption:= Copy(str, 2, Length(str) - 1) + Copy(str, 1, 1);
end;

procedure InitializeWizard();
begin
  //lbl1
  lbl1:= TLabel.Create(WizardForm);
  with lbl1 do begin
    Parent:= WizardForm;
    Left:= 20;
    Top:= 325;
    Width:= 200;
    Height:= 20;
    AutoSize:= False;
    Caption:= 'Вот, что можно сделать средствами Inno Setup...  ';
    Font.Color:= clWindowText;
    Font.Height:= -16;
    Font.Name:= 'MS Sans Serif';
    Font.Style:= [];
    ParentFont:= False;
  end;
 
  //tmr1
  tmr1:= TTimer.Create(WizardForm);
  with tmr1 do begin
    Interval:= 200;
    OnTimer:= @tmr1Timer;
  end;
end;


Для правильной работы требуется: ispack, после чего необходимо обновить, путём замены файлов, до расширенной версии от Restools.
В расширенную версию входят:
InnoCompiler - в неё входят файлы: Compil32.exe и Templates.dat;
Inno_ISCmplr_Setup - в неё входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32.

de_MAX 23-03-2009 12:18 1071865

Serega_,
Что-то не выходит:
Цитата:

Unknown type 'TTimer'

Serega 23-03-2009 13:20 1071956

de_MAX, установите себе ispack, а затем обновите, путём замены файлов, до расширенной версии от Restools. Ссылки я давл выше, ссылка на пост.

de_MAX 23-03-2009 15:24 1072120

Serega_, у меня стоит ispack-5.2.4-dev и Restools

Serega 23-03-2009 16:30 1072207

de_MAX, Restools:
InnoCompiler090319_English - в неё входят файлы: Compil32.exe и Templates.dat;
Inno_ISCmplr_Setup090302 - в неё входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32.
У вас скорей всего не установлен Inno_ISCmplr_Setup...

de_MAX 23-03-2009 16:46 1072237

Serega_, спасибо. После установки Inno_ISCmplr_Setup все работает.

MrLD 24-03-2009 11:27 1073036

Serega_, Здравствуй... Извини на сопровождение кинули. Если не тяжело давай вернемся к разговору про запись ini. Я подумал и решил не заморачиваца над разбиением. Т.к. посмотрев форум внимательней заметил что key можно принудительно в строку записать. но проблемма в том что после создания + #13 преобразуется в символ переноса на новою строку. т.е. "квадратный ноль". Не знаю понял ли ты меня просто на форуме код преобразуется и привести тебе пример я не могу.

MrLD 24-03-2009 12:36 1073128

Serega_, Вопрос снят ошибку понял )

MrLD 24-03-2009 16:21 1073339

Serega_, Вот такая строка
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini',
'[Connect]' + #13 + 'ConStr=Provider=SQLOLEDB.1' + ';Data Source=' + 'NameSource' + ';Initial Catalog=' + 'NameCatalog', true);
Как назначить NameSource и NameCatalog переменными?

Serega 24-03-2009 17:11 1073402

MrLD, всё очень просто, а если Вас не научили родители простому этикету, сказать ‘спасибо’, когда человек в ответ на Вашу просьбу, потратил четыре часа своего личного времени, на решение Вашей задачи, то о чём можно разговаривать...
Форум, это прежде всего общение, а не потребительский инстинкт, что мне надо, а вы решите за меня...
Просто по человечески становится обидно...
Цитата:

Цитата MrLD
Как назначить NameSource и NameCatalog переменными? »

Пишите процедуры под названием NameSource и NameCatalog и пишите, что они должны делать, а затем записываете так:
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini',
'[Connect]' + #13 + 'ConStr=Provider=SQLOLEDB.1' + ';Data Source=' + {code:NameSource} + ';Initial Catalog=' + {code:NameCatalog}, true);

MrLD 24-03-2009 17:39 1073434

Serega_, ))))))) Вопрос опять снят ))

Serega_, Искренне прошу прощения. Я уже написал что перекинули на другую задачу.... И огромное Спасибо )) не держи зла.. просто забегался )) Конец месяца и все такое )) А с переменными уже разобрался но все равно спасибо ))

Serega_, Пристыдил ))) Еще раз спасибо )) и еще раз извини ))

ChVL 25-03-2009 16:40 1074472

В файл {sys}\drivers\etc\hosts надо добавить строку 127.0.0.1 www.example.cоm.
Как это прописать в скрипте?

Serega 25-03-2009 16:47 1074477

ChVL, SaveStringToFile(путь и имя файла, 'текст', true);

VLADIS LOVE 25-03-2009 19:27 1074654

Подскажите, как сделать категории выбора в инсталляции. Например, я делаю патч для игры. У меня такие параметры:
Геймплей (реальный, оригинальный - оба исключительно), затем следующая категория - язык (русский английский, тоже исключительно) и т.д. Как сделать в ISTOOL или по-другому, чтобы была такая возможность выбора?

ChVL 25-03-2009 20:57 1074735

Serega_,
Спасибо за подсказку!
Вот рабочий вариант:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
 SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', ' 127.0.0.1 www.example.com', True);
end;
end;

Запись производится в конце установки, т.к. иначе она получалась кривой.
Есть одна тонкость: запись делается в том месте, где остановился курсор от предыдущей. Для полного счастья надо бы перед вводимой строкой (127.0.0.1) вписать команду на перевод строки. Как это сделать?

Serega 25-03-2009 21:20 1074753

ChVL, первод строки #13, т.е.
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13 + ' 127.0.0.1 www.example.com', True);

P.S.
Если будет при компилляции ругаться, тогда:
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', '' + #13 + ' 127.0.0.1 www.example.com', True);
хотя ругаться не должен...

Diman19 25-03-2009 21:23 1074755

Всем привет!Скажите пожалуйста для чего используется Excludes?И как пути к файлам программы указывать?Как целая папка или по каждому файлу?

ChVL 25-03-2009 21:55 1074788

Serega_,
Yes-s!! Вот теперь уже всё. Спасибо!!

Serega 25-03-2009 21:55 1074789

VLADIS LOVE,
Пример
Код:

; Первый вариант

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: english; MessagesFile: compiler:Languages\English.isl

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Геймплей; Types: full custom; Flags: fixed
Name: a\a; Description: Реальный; Types: full custom; Flags: exclusive
Name: a\b; Description: Оригинальный; Types: full custom; Flags: exclusive
Name: b; Description: Язык; Types: full custom; Flags: fixed
Name: b\a; Description: Русский; Types: full custom; Flags: exclusive
Name: b\b; Description: Английский; Types: full custom; Flags: exclusive

[Files]
Source: .......; DestDir: {app}; Components: a
Source: .......; DestDir: {app}; Components: a\a
Source: .......; DestDir: {app}; Components: a\b
Source: .......; DestDir: {app}; Components: b
Source: .......; DestDir: {app}; Components: b\a
Source: .......; DestDir: {app}; Components: b\b

; Второй вариант
;[Setup]
;AppName=My Program
;AppVerName=My Program v 1.5
;DefaultDirName={pf}\My Program
;OutputDir=.
;Compression=lzma/ultra
;InternalCompressLevel=ultra
;SolidCompression=yes

;[Languages]
;Name: russian; MessagesFile: compiler:Languages\Russian.isl
;Name: english; MessagesFile: compiler:Languages\English.isl

;[Tasks]
;Name: a; Description: Реальный; GroupDescription: Геймплей:; Flags: exclusive
;Name: b; Description: Оригинальный; GroupDescription: Геймплей:; Flags: exclusive unchecked
;Name: c; Description: Русский; GroupDescription: Язык:; Flags: exclusive
;Name: d; Description: Английский; GroupDescription: Язык:; Flags: exclusive unchecked

;[Files]
;Source: .......; DestDir: {app}; Tasks: a
;Source: .......; DestDir: {app}; Tasks: b
;Source: .......; DestDir: {app}; Tasks: c
;Source: .......; DestDir: {app}; Tasks: d



Diman19,
Цитата:

Цитата из справки
Excludes
Описание:
Указывает список образцов для исключения, разделенных запятыми. Этот параметр не комбинируется с флагом external

Цитата:

Цитата Diman19
как пути к файлам программы указывать »

Source: полный путь\CTL3DV2.DLL; DestDir: {sys}; Flags: onlyifdoesntexist uninsneveruninstall
Цитата:

Цитата Diman19
целая папка или по каждому файлу »

Да как вам будет удобней, для папки надо писать так:
Source: полный путь к папке\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs

VLADIS LOVE 26-03-2009 11:43 1075157

Serega_, спасибо большое!

VLADIS LOVE 27-03-2009 10:50 1076015

И еще один вопросик:
Можно сделать чтобы был вид спойлера, т.е. нажимаешь на плюсик и открывался выбор компонентов? Знаю, то NSIS можно, а в INNO?

Serega 27-03-2009 11:03 1076029

VLADIS LOVE, добавьте в секцию [Setup] строку ComponentsListTVStyle=true. Вам понадобится расширенная версия от Resstools, ссылки я давал выше.

volk1234 27-03-2009 16:57 1076389

Тема прикреплена в форуме...

volk1234 28-03-2009 03:37 1076888

Serega_ и другие заинтересованные лица:

Я в Inno профан поэтому просьба к вам, посмотрите шапку- может чего лишнего убрать?
Допустим оставить только ссылку на версия 5.2.4 ?? Или 5.2.0 тоже нужна?
Жду предложений.

Serega 28-03-2009 09:56 1076984

volk1234, как говорят, выскажу лично своё мнение...

Можно убрать:
Unpaker 2.0 , Зеркало, зеркало - распаковывает инсталляторы версии 5.2.2;
Inno Setup Pack 5.2.2 RU.

Немного перефразировать ссылку:
- Как убрать окно приветствия в мастере установки приложения: на - Как убрать страницу приветствия (wpWelcome) в мастере установки приложения:, я понимаю, что в такой форме вопрос был задан, но так более понятней...

Diman19 28-03-2009 16:45 1077232

Всем привет!Скажите пожалуйста как создать отдельное окно для ввода ключа продукта?Вот пример


Спасибо!

Serega 30-03-2009 02:45 1078565

Цитата:

Цитата Diman19
как создать отдельное окно для ввода ключа продукта? »

Сделал на странице приветствия
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

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

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Serial; ValueData: {code:edtText}; Flags: uninsclearvalue

Code]
var
  edt: array [1..5] of TEdit;
  txt: TNewStaticText;
  i, e, t: integer;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then
  WizardForm.NextButton.Enabled:= False; // отключаю кнопку Далее
end;

function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var                      //
//  s: string;              //
begin
 { получаем текст из edit'ов и присваем переменной s }
  for i:= 1 to 5 do begin
    s:= s + edt[i].Text + '-';
  end;
 { удаляем лишний знак тире в конце строки }
  s:= Copy(s, 1, Length(s) - 1);
  Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
//  If CurStep = ssDone then
//  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
//  Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
//  If CurUninstallStep = usDone then
//  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
 но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
  for i:= 1 to 4 do begin
    if Length(edt[i].Text) = 4 then edt[i+1].SetFocus;
  end;
{ проверяем условие если все edit'ы заполненны, то делаем доступной кнопку Далее}
  for i:= 1 to 5 do begin
    if Length(edt[i].Text) >= 4 then
    WizardForm.NextButton.Enabled:= True else
    WizardForm.NextButton.Enabled:= False;
  end;
end;

procedure CreateComponents;
begin
  WizardForm.NextButton.Enabled:= False;
  t:= 57;
  e:= t;
  // создаём 4 тире
  for i:= 1 to 4 do begin
  txt:= TNewStaticText.Create(WizardForm.WelcomePage);
    with txt do begin
      Parent:= WizardForm.WelcomePage;
      Name:= 'txt' + IntToStr(i+1);
      Left:= 173 + (t*i);
      Top:= 182;
      Caption:= '-';
      AutoSize:= True;
      Font.Height:= -13;
      Font.Style:= [fsBold];
    end;
  end;
  // создаём 5 edit'ов
  for i:= 1 to 5 do begin
  edt[i]:= TEdit.Create(WizardForm.WelcomePage);
    with edt[i] do begin
      Parent:= WizardForm.WelcomePage;
      Left:= 123 + (e*i);
      Top:= 180;
      Width:= 47;
      Height:= 21;
      MaxLength:= 5;
      OnKeyPress:= @edtKeyPress;
    end;
  end;
end;

procedure InitializeWizard();
begin
  CreateComponents;
end;


Diman19 31-03-2009 02:00 1079660

Спасибо за скрипт.А не подскажешь как сделать чтобы это всё было после окна приветствия?

Спасибо!

Serega 31-03-2009 02:30 1079673

Diman19, так чего же сразу не сказали. Только не окна, а страницы... Сделал второй страницей
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

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

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Serial; ValueData: {code:edtText}; Flags: uninsclearvalue

Code]
var
  edt:array [1..5] of TEdit;
  txt: TNewStaticText;
  i, e, t: integer;
  NewPage: TWizardPage;
  lbl: TLabel;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = NewPage.ID then
  WizardForm.NextButton.Enabled:= False; // отключаю кнопку Далее
end;

function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var                      //
//  s: string;              //
begin
 { получаем текст из edit'ов и присваем переменной s }
  for i:= 1 to 5 do begin
    s:= s + edt[i].Text + '-';
  end;
 { удаляем лишний знак тире в конце строки }
  s:= Copy(s, 1, Length(s) - 1);
  Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
//  If CurStep = ssDone then
//  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
//  Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
//  If CurUninstallStep = usDone then
//  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
 но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
  for i:= 1 to 4 do begin
    if Length(edt[i].Text) = 4 then edt[i+1].SetFocus;
  end;
{ проверяем условие если все edit'ы заполненны, то делаем доступной кнопку Далее}
  for i:= 1 to 5 do begin
    if Length(edt[i].Text) >= 4 then
    WizardForm.NextButton.Enabled:= True else
    WizardForm.NextButton.Enabled:= False;
  end;
end;

procedure SerialPage;
begin
  NewPage:= CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ');

  WizardForm.NextButton.Enabled:= False;
  t:= 57;
  e:= t;
  // создаём Label
  lbl:=TLabel.Create(NewPage);
    with lbl do begin
      Left:= 0;
      Top:= 0;
      Width:= 417;
      Height:= 28;
      AutoSize:= False;
      WordWrap:= True;
      Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.';
      Parent:= NewPage.Surface;
    end;

  // создаём 4 тире
  for i:= 1 to 4 do begin
  txt:= TNewStaticText.Create(NewPage);
    with txt do begin
      Parent:= NewPage.Surface;
      Name:= 'txt' + IntToStr(i+1);
      Left:= 50 + (t*i);
      Top:= 50;
      Caption:= '-';
      AutoSize:= True;
      Font.Height:= -13;
      Font.Style:= [fsBold];
    end;
  end;
  // создаём 5 edit'ов
  for i:= 1 to 5 do begin
  edt[i]:= TEdit.Create(NewPage);
    with edt[i] do begin
      Parent:= NewPage.Surface;
      Left:= 0 + (e*i);
      Top:= 47;
      Width:= 47;
      Height:= 21;
      MaxLength:= 5;
      OnKeyPress:= @edtKeyPress;
    end;
  end;
end;

procedure InitializeWizard();
begin
  SerialPage;
end;


AnalogXP 02-04-2009 12:11 1081807

Здравствуйте!

Только вчера перешел с NSIS на Inno Setup и возникло пара вопросов:

1. Если удаляем программу Х, то появляется сообщение о подтверждении. Так вот, после этого сообщения нужно запустить другую программу Y и только после ее закрытия, продолжить удаление X. Вот что сейчас у меня:
Код:

[UninstallRun]
Filename: {app}\Feedback.exe; Flags: waituntilidle

Программа Y появляется, но удаление продолжается, и сама Y остается в папке.

2. Как закрыть программу Х, если она работает, а пользователь запустил удаление программы? Или вывести сообщение что нужно закрыть программу перед удалением.

3. Как насильно удалить папку деисталированной программы (она у меня так и остается)?

4. Как найти и удалить папку из Application Data\MyProgram (чтобы работало и в XP и Vista)?

Заранее благодарен за помощь!

Serega 02-04-2009 13:11 1081857

AnalogXP,
1-ый вопрос
Так всё правильно, вы используете флаг waituntilidle
Цитата:

Цитата из Справки
Если установлен этот флаг, инсталляция остановится и подождет, пока пользователь введет необходимые ей данные, вместо того, чтобы ожидать окончания процесса. (Как функция Win32 WaitForInputIdle). Не комбинируется с nowait.

Вам нужен флаг waituntilterminated
Цитата:

Цитата из Справки
Если указан этот флаг, инсталлятор подождет, пока процесс полностью завершится. Обратите внимание, что этот флаг всегда задается по умолчанию (т.е. для того, чтобы инсталлятор подождал, пока завершится процесс, этот флаг указывать не обязательно). Указывается он только в комбинации с флагом shellexec - в этом случае это необходимо, если инсталлятор должен дождаться завершения процесса. Не комбинируется с флагами nowait и waituntilidle.

т.е. вам надо записать так:
Код:

[UninstallRun]
Filename: {app}\Feedback.exe; Flags: waituntilterminated


3-ий и 4-ый вопрос
напишите в секции Code, следующее:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then
  // проверяем существование папки после удаления программы
  if DirExists(ExpandConstant('{userappdata}\My Program')) = True then
  // если существует, то удаляем её со всеми подпапками и файлами которые остались
  DelTree(ExpandConstant('{userappdata}\My Program'), True, True, True);
  // путь к папке (Application Data) - {userappdata} - для текущего пользователя, {commonappdata} - для всех пользователей
end;

Должно работать и на Vista, но проверить негде.

По второму вопросу, чуть позже...

Serega 02-04-2009 14:52 1081924

Вложений: 1
AnalogXP,
2-ой вопрос

Вам потребутся ISTask.dll, которую прикрепил к сообщению.
Пример использования ISTask.dll:
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу MyProg?; Flags: postinstall nowait skipifsilent

; ниже поправьте название секции
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('MyProg.exe', false) then begin
    UninstallProgressForm.Visible := False;
    if MsgBox('Обнаружена запущенная программа MyProg. Завершить?', mbConfirmation, mb_yesno) = idyes then begin
      KillTask('MyProg.exe');
      UnloadDll(ExpandConstant('{app}\ISTask.dll'));
      UninstallProgressForm.Visible := True;
    end else begin
      MsgBox('Завершите работу программы MyProg, затем снова запустите программу удаления.', mbInformation, mb_ok);
      UnloadDll(ExpandConstant('{app}\ISTask.dll'));
      Abort;
    end;
  end else begin
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end;
end;


AnalogXP 02-04-2009 16:23 1082023

Serega_, спасибо, то что нужно.
Вот только собственную папку так и не сумел удалить. Чего-то я не понял:

Код:

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then 
  begin
        ...
        if DirExists(ExpandConstant('{app}') = True then
                DelTree(ExpandConstant('{app}', True, True, True);
  end;
end;


Serega 02-04-2009 16:44 1082062

AnalogXP, значит из этой папки во время удаления запущен какой-то процесс... Попробуйте выяснить какой процесс запущен и используйте для него:
DelayDeleteFile(ExpandConstant('{app}\FileName'), 2);
Цитата:

Цитата из Справки
procedure DelayDeleteFile(const Filename: String; const Tries: Integer);
Описание:
Попытается удалить Filename, повторяя попытки Tries раз, если файл используется. Задержка между попытками - 250 мсек.


AnalogXP 02-04-2009 17:44 1082132

Цитата:

Цитата Serega_
AnalogXP, значит из этой папки во время удаления запущен какой-то процесс... Попробуйте выяснить какой процесс запущен и используйте для него: »

Там остается только одна пустая папка 'language'. Из нее файлы также удаляются а вот сама...

Кстате предыдущий код вообще не компилируется (прошу прощения за ошибку). Вот измененный:
Код:

if DirExists('{app}') = True then
                                DelTree('{app}', True, True, True);

Но как уже сказал папка программы и вложенная, остаются.

Serega 02-04-2009 18:24 1082174

Вот, реализовал интересный эффект - эффект печатной машинки, т.е. текст на мастере появляется не сразу, а по одной букве, что создаёт эффект того, что текст печатается...
Скрипт
Код:

; Интересный эффект для Вашего инсталлятора, эффект печатной машинки...
; Для нормальной работы у Вас должен быть установлен набор от Restools http://restools.hanzify.org/
; Подразумеваю под словом набор - InnoCompiler и ISCmplr, последние версии Вы можете найти на сайте Restools.
; Автор: Serega, http://forum.oszone.net/member.php?userid=88670

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

Code]
var
  lbl1, lbl2: TLabel;
  txt1, txt2: string;
  i: Integer;
  tmr1: TTimer;

procedure tmr1Timer(Sender: TObject);
begin
  tmr1.Enabled:= False;

  txt1:= WizardForm.WelcomeLabel1.Caption;
  txt2:= WizardForm.WelcomeLabel2.Caption;

  lbl1.Caption:= '';
  for i:= 1 to Length(txt1) do begin
    if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
    lbl1.Caption:= lbl1.Caption + txt1[i];
    Application.ProcessMessages;
    Sleep(100); // время задержки между показом букв
  end;

  lbl2.Caption:= '';
  for i:= 1 to Length(txt2) do begin
    if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
    lbl2.Caption:= lbl2.Caption + txt2[i];
    Application.ProcessMessages;
    Sleep(60); // время задержки между показом букв
  end;
end;

procedure CreateComponents;
begin
// скрываем стандартные Label'ы
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;

// задаём свои Label'ы
  lbl1:= TLabel.Create(WizardForm);
  with lbl1 do begin
    Left:= WizardForm.WelcomeLabel1.Left;
    Top:= WizardForm.WelcomeLabel1.Top;
    Width:= WizardForm.WelcomeLabel1.Width;
    Height:= WizardForm.WelcomeLabel1.Height;
    AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
    WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
    Font.Style:= WizardForm.WelcomeLabel1.Font.Style;
    Font.Size:= WizardForm.WelcomeLabel1.Font.Size;
    Font.Color:= WizardForm.WelcomeLabel1.Font.Color;
    Transparent:= True;
    Caption:= '';
    Parent:= WizardForm.WelcomePage;
  end;

  lbl2:=TLabel.Create(WizardForm);
  with lbl2 do begin
    Left:= WizardForm.WelcomeLabel2.Left;
    Top:= WizardForm.WelcomeLabel2.Top;
    Width:= WizardForm.WelcomeLabel2.Width;
    Height:= WizardForm.WelcomeLabel2.Height;
    AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
    WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
    Font.Style:= WizardForm.WelcomeLabel2.Font.Style;
    Font.Size:= WizardForm.WelcomeLabel2.Font.Size;
    Font.Color:= WizardForm.WelcomeLabel2.Font.Color;
    Transparent:= True;
    Caption:= '';
    Parent:= WizardForm.WelcomePage;
  end;

  tmr1:= TTimer.Create(WizardForm);
  with tmr1 do begin
    Interval:= 500; // время задержки перед началом показа текста
    OnTimer:= @tmr1Timer;
  end;
end;

procedure InitializeWizard();
begin
  CreateComponents;
end;


AnalogXP 02-04-2009 19:38 1082274

Код:

[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.)
AppName=MyProgramName
AppVerName=MyProgramName 3.1
AppPublisher=MyCompany
DefaultDirName={pf}\MyProgramName
DefaultGroupName=MyProgramName
AllowNoIcons=yes
OutputDir=E:\Install\Programe\Programa\MyProgramName
OutputBaseFilename=MyProgramName_3.1
SetupIconFile=E:\Install\Programe\Programa\MyProgramName \in.ico
Uninstallable=yes
UninstallDisplayIcon={app}\unins000.exe, 2
Compression=lzma/ultra
InternalCompressLevel=ultra
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

[Files]
Source: E:\Install\Programe\Programa\MyProgramName\Installer\MyProgramName .exe; DestDir: {app}; Flags: ignoreversion
Source: E:\Install\Programe\Programa\MyProgramName\Installer\LICENSE.TXT; DestDir: {app}; Flags: ignoreversion
Source: E:\Install\Programe\Programa\MyProgramName\Installer\sqlite3.dll; DestDir: {app}; Flags: ignoreversion
Source: E:\Install\Programe\Programa\MyProgramName\Installer\VIcon.bin; DestDir: {app}; Flags: ignoreversion
Source: E:\Install\Programe\Programa\MyProgramName\Installer\Feedback.exe; DestDir: {app}; Flags: ignoreversion
Source: E:\Install\Programe\Programa\MyProgramName\Installer\language\*; DestDir: {app}\language; Flags: ignoreversion recursesubdirs
Source: E:\Install\Programe\Programa\MyProgramName\Installer\un.ico; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\MyProgramName ; Filename: {app}\MyProgramName.exe
Name: {group}\{cm:ProgramOnTheWeb,MyProgramName }; Filename: http://www.mycompany.com/
Name: {group}\{cm:UninstallProgram,MyProgramName }; Filename: {uninstallexe}; IconFilename: {app}\un.ico
Name: {commondesktop}\MyProgramName; Filename: {app}\MyProgramName.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\MyProgramName; Filename: {app}\MyProgramName.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\MyProgramName.exe; Description: {cm:LaunchProgram,MyProgramName}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKCU; Subkey: Software\MyProgramName\Options\Position; Flags: uninsdeletekey

[UninstallRun]
Filename: {app}\Feedback.exe; Flags: waituntilterminated

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then  // проверяем существование папки после удаления программы
  begin
        if DirExists(ExpandConstant('{userappdata}\MyProgramName')) = True then 
                DelTree(ExpandConstant('{userappdata}\MyProgramName'), True, True, True); 
        if DirExists('{app}') = True then
                DelTree('{app}', True, True, True);
  end;
end;


Serega 02-04-2009 21:55 1082467

AnalogXP, в скрипте, у вас всё нормально, по крайней мере ошибок я не нашёл. Единственное, что в секции [Files], я бы записал так:
читать дальше »

Код:

.........
[Files]
Source: E:\Install\Programe\Programa\MyProgramName\Installer\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs
........

т.е. все файлы в одной строке. Если в папке Installer или её подпапках есть файлы, которые не надо включать в инсталлятор, то нужно использовать Excludes:
Код:

.........
[Files]
Source: E:\Install\Programe\Programa\MyProgramName\Installer\*; Excludes: FileName1.exe, FileName2.exe; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs
........

т.е. перечисляем файлы через запятую, так же можно использовать переменные - *.txt

Да и используйте в своих сообщениях тег [ more][/more]

Хотя попробуете добавить ещё раз DelTree, т.е.
читать дальше »
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then  // проверяем существование папки после удаления программы
  begin
          if DirExists(ExpandConstant('{userappdata}\MyProgramName')) = True then
                DelTree(ExpandConstant('{userappdata}\MyProgramName'), True, True, True);
          if DirExists('{app}') = True then begin
                  DelTree('{app}', True, True, True);
                  DelTree('{app}', True, True, True);
    end;
  end;
end;


AnalogXP 02-04-2009 21:58 1082468

Цитата:

Цитата Serega_
т.е. все файлы в одной строке. »

Спасибо, я об этом знаю, просто у меня там действительно еще много лишних файлов для дистрибутива.

Что посоветуете, делать с папкой? Так и не хочет удалится. Как найти причину!?

Serega 02-04-2009 22:03 1082478

AnalogXP, вы второй раз использовали DelTree?

AnalogXP 03-04-2009 00:21 1082614

Ну так в примере выше все указал. Вот как стараюсь удалить:

Код:

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then  // проверяем существование папки после удаления программы
  begin
        if DirExists(ExpandConstant('{userappdata}\MyProgramName')) = True then 
                DelTree(ExpandConstant('{userappdata}\MyProgramName'), True, True, True); 
        if DirExists('{app}') = True then
                DelTree('{app}', True, True, True);
  end;
end;

Проверяю если есть папка в Application Data и удаляю.
Проверяю если есть папка программы и также пробую удалить.
А вообще, когда вызывается эта процедура?

Serega 03-04-2009 00:45 1082629

AnalogXP, я добавил в прошлое сообщение пример с кодом. Посмотрите внимательней... Там DelTree используется два раза. Попробуйте.

AnalogXP 03-04-2009 02:44 1082667

Цитата:

Цитата Serega_
AnalogXP, я добавил в прошлое сообщение пример с кодом. Посмотрите внимательней... Там DelTree используется два раза. Попробуйте. »

Хе-хе, прозевал :)
Работает спасибо!

Комсомолец 03-04-2009 16:34 1083194

Кто расскаже, что это такое? Я так понял-всплывающая справка по аналогии с msi-инсталляторами? Как ее прикрутить?

Serega 03-04-2009 17:34 1083251

Цитата:

Цитата Комсомолец
что это такое? »

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

Цитата Комсомолец
Я так понял-всплывающая справка по аналогии с msi-инсталляторами? »

Нет... или слово всплывающая, я понимаю по другому... Одним словом, при запуске своего инсталлятора из командной строки с ключом /?, пример:
setup.exe /?
Появляется окно с разделом справки из Inno Setup, с параметрами командной строки поддерживаемой инсталлятором.
Цитата:

Цитата Комсомолец
Как ее прикрутить? »

Как оказалось проще простого, т.е. создаёте в обычном текстовом документе всё, что здесь написано и сохраняете под именем clihelp.iss. После этого, в своём скрипте записываете, пример:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Files]
Source: clihelp.iss; Flags: dontcopy

[_Code]
const
        ComponentList = '';
        TaskList = '';
        ParameterList = '';
#include "clihelp.iss"

и всё... Попробуйте вызвать готовый инсталлятор с ключом /?

Комсомолец 03-04-2009 18:01 1083268

Serega_, и попробовал. что с /? что с /help начинается обычная установка((

Serega 03-04-2009 18:13 1083274

Вложений: 1
Комсомолец, прикрепил к сообщению: 2 скрипта и инсталлятор. Попробуйте... Всё сделано именно так, как я описал выше постом...

Комсомолец 03-04-2009 18:29 1083285

Serega_, спасибо, скачал. так какой ключ? /? - такой?

Serega 03-04-2009 18:40 1083296

Комсомолец, работают все ключи, с один результатом, а именно: /?, /h, /help - выводят окно справки...

P.S.
Если надо, могу выложить полный раздел справки по параметрам командной строки из последней версии Справки - на русском.
Просто, перевожу для себя...

Комсомолец 03-04-2009 19:03 1083319

Serega_, давай. в принципе есть, но от полной не откажусь. Ключи и правда работают))

Serega 03-04-2009 19:16 1083329

Перевод раздела 'Параметры командной строки инсталлятора' из справки к Inno Setup, версия 5.2.3.

Параметры командной строки инсталлятора

/SP-
Отключает в начале Установки диалог Эта программа установит... Вы желаете продолжить?. Конечно, это не будет иметь никакого эффекта, если DisableStartupPrompt секции [Setup] была установлена на yes.

/SILENT, /VERYSILENT
Установка в тихом или очень тихом режиме. При установке в тихом режиме мастер и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень тихой установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки, описанной выше).

Если после установки необходима перезагрузка и команда '/NORESTART' не используется (см. ниже), и установка проходит в тихом режиме, появится сообщение Перезагрузить сейчас?. Если режим установки очень тихий, система перезагрузится не спрашивая.

/SUPPRESSMSGBOXES
Установка с подавлением сообщений. Имеет эффект при использовании совместно с '/SILENT' и '/VERYSILENT'.

Заданный по умолчанию ответ в сообщениях, где есть выбор:

- Да, в 'Сохранить новый файл?'.
- Нет, в 'Файл существует, перезаписать?'.
- Прервать, в Прервать/Повторить.
- Отмена, в Повторить/Отмена.
- Да (=продолжить), в DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall.
- Да (=перезагрузить) в FinishedRestartMessage/UninstalledAndNeedsRestart.

5 видов сообщений, которые не поддерживаются:

- Сообщение 'О программе...'
- Сообщение 'Выйти из программы установки?'.
- Cообщение FileNotInDir2, когда во время Установки требуется вставить новый диск и он не был найден.
- Любое сообщение (ошибка), отображенное прежде, чем, инсталлятор (или деинсталлятор) прочитают параметры командной строки.
- Любое сообщение вызванное функцией MsgBox из секции [code].

/LOG
Указывает инсталлятору создать log-файл в папке TEMP для подробного отчета о действиях и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании ошибок. Например, если вы подозреваете, что файл не был перезаписан, хотя должен быть (или наоборот), то log-файл сообщит, что файл был действительно пропущен и почему.

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не перезаписываются и не дополняются.)

Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята пользователем.

/LOG="имя файла"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет перезаписан. Если файл не может быть создан, установка прервется и выдаст сообщение об ошибке.

/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку 'Отмена' и игнорируя клики на кнопке 'Закрыть'. Используется в комбинации с '/SILENT' или '/VERYSILENT'.

/NORESTART
Указывает инсталлятору не перезагружать компьютер даже если это необходимо.

/RESTARTEXITCODE=код завершения
Задает инсталлятору код, который он должен возвратить, если необходима перезагрузка. Используется с '/NORESTART'.

/LOADINF="имя файла"
Указывает инсталлятору загрузить параметры установки из указанного файла после проверки командной строки. Этот файл может быть подготовлен с помощью команды '/SAVEINF=', см. ниже.

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

/SAVEINF="имя файла"
Указывает инсталлятору сохранять параметры установки в указанный файл.

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

/LANG=language
Задает используемый язык. language определяет имя языка заданного в параметре секции [Languages].

При использовании параметра /LANG, диалог Выбор языка установки будет подавлен.

/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице мастера Выбор папки установки. Должен быть указан полный путь.

/GROUP="имя папки"
Меняет имя папки, отображаемое на странице мастера Выбор папки в меню 'Пуск'. Если директива DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки игнорируется.

/NOICONS
Указывает инсталлятору отметить выбор Не создавать значков на странице мастера Выбор папки в меню 'Пуск'.

/TYPE=type name
Меняет заданный по умолчанию тип установки.

Если указанный тип будет существовать и не будет 'Выборочным' (custom), то любой указанный параметр /COMPONENTS будет проигнорирован.

/COMPONENTS="имена компонентов разделяются запятыми"
Меняет выбранные по умолчанию компоненты. В этом случае параметр командной строки указывает инсталлятору менять тип установки на 'Выборочный'. Если 'Выборочный' тип не определён, то этот параметр игнорируется.

Только указанные компоненты будут выбраны, с остальных будет снят выбор.

Если перед именем компонента добавить символ "*", то все дочерние компоненты будут также выбраны (за исключением тех, которые имеют флаг dontinheritcheck). Если перед именем компонента добавить символ "!", то компонент не будет выбран.

Этот параметр не снимет выбор с компонентов, которые имеют флаг fixed.
Код:

Пример:
Снимаем выбор со всех компонентов, затем выбираем компоненты "help" и "plugins":
/COMPONENTS="help,plugins"

Код:

Пример:
Снимаем выбор со всех компонентов, затем выбираем родительский компонент "parent" и все его дочерние компоненты, за исключением одного "parent\child":
/COMPONENTS="*parent,!parent\child"

/TASKS="имена задач разделяются запятыми"
Определяет список задач которые должны быть выбраны.

Только указанные задачи будут выбраны, с остальных он будет снят. Используйте параметр /MERGETASKS, если Вы хотите сохранить заданный по умолчанию набор задач и только выбрать/снять некоторые из них.

Если перед именем задачи добавить символ "*" то все дочерние задачи будут также выбраны (за исключением тех, которые имеют флаг dontinheritcheck). Если перед именем задачи добавить символ "!", то задача не будет выбрана.
Код:

Пример:
Снимаем выбор со всех задач, затем выбираем задачи "desktopicon" и "fileassoc":
/TASKS="desktopicon,fileassoc"

Код:

Пример:
Снимаем выбор со всех задач, затем выбираем родительскую задачу "parent" и все ее до-черние задачи, за исключением одной "parent\child":
/TASKS="*parent,!parent\child"

/MERGETASKS="имена задач разделяются запятыми"
Параметр похож на /TASKS, но в отличие от него сохраняет заданный по умолчанию набор задач и лишь дополняет указанными задачами.

Если директива UsePreviousTasks равна yes, то указанные задачи будут выбраны/снят выбор, после того, как предыдущие задачи восстановлены.
Код:

Пример:
Сохраняем заданный по умолчанию набор выбранных задач и дополнительно выбираем задачи "desktopicon" и "fileassoc":
/MERGETASKS="desktopicon,fileassoc"

Код:

Пример:
Сохраняем заданный по умолчанию набор выбранных задач, но снимаем выбор с задачи "desktopicon":
/MERGETASKS="!desktopicon"

/PASSWORD=пароль
Задает пароль. Если не указана директива Password секции [Setup], этот параметр командной строки игнорируется.

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

Комсомолец 03-04-2009 19:34 1083344

Serega_, а это не то же самое, что и в справке инсталлятора? просто у меня тот учебник на русском.

Serega 03-04-2009 19:41 1083353

Комсомолец, :teeth: на первый взгляд, так только кажется... если посмотреть внимательней добавлены команды:
/SUPPRESSMSGBOXES, /TYPE, /TASKS, /MERGETASKS + добавлены описания в старые команды и скорректированы некоторые формулировки...

Комсомолец 03-04-2009 19:57 1083363

Serega_, отлично))

volk1234 06-04-2009 01:27 1085229

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

2ALL
Скоро будет более подробный материал по Inno с ключами и прочим...

Serega_ благодарности ставятся за общеполезные сообщения, содержащие эксклюзивную информацию
или решение проблемы.
В данном случае благодарят если уже выложенна готовая статья или описание
сделанное человеком самостоятельно. В качестве благодарности за работу. Пока никакой работы не сделано.

Необоснованно сделанные благодарности администрация снимает :)

Относитесь к своим благодарностям рачительно - не жадничайте но и не разбрасывайтесь. :)

Devils0411 07-04-2009 14:28 1086779

Есть 3 файла. Скажем File1.bin, File2.bin, File3.bin. При установке (распаковке) файлы File1.bin и File2.bin, должны устанавливаться (копироваться) в заранее указанные пути (File1.bin в %userprofile%\Главное меню\Программы\Автозагрузка, File2.bin в %programfiles%). При установке (копировании) файла File3.bin, должно выскачить окошко, с просьбой указать путь. Вот собственно и все.
З.Ы. Третий файл мне нужно скинуть в ту же папку что и первый, только в "ограниченную учетку" (проблема в том, что на разных компах, по-разному называны учетки :(

Serega 07-04-2009 17:59 1087057

Devils0411,
читать дальше »

Цитата:

Цитата Devils0411
File1.bin в %userprofile%\Главное меню\Программы\Автозагрузка »

Обычно туда только ярлыки добавляют, но если всё же сам файл, то в секции [Files] пишите:
Код:

[Files]
Source: полный путь до файла\File1.bin; DestDir: {userstartup}; Flags: ignoreversion

Цитата:

Цитата Devils0411
File2.bin в %programfiles% »

Здесь тоже не совсем ясно, т.е. просто файл в каталог Program Files? Если да, то добавьте в туже секцию [Files]:
Код:

[Files]
Source: полный путь до файла\File2.bin; DestDir: {pf}; Flags: ignoreversion

Цитата:

Цитата Devils0411
При установке (копировании) файла File3.bin, должно выскачить окошко, с просьбой указать путь »

Конечно можно сделать чтоб при установке выскочил диалог с просьбой указать каталог. А есть вообще смысл изобретать велосипед, когда можно просто выбрать папку установки, на странице выбора директории?
Цитата:

Цитата Devils0411
Третий файл мне нужно скинуть в ту же папку что и первый, только в "ограниченную учетку" »

К сожалению я не знаю, что такое "ограниченная учетка"...
Итог - вот пример всего скрипта:
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\Учётка
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: полный путь до файла\File1.bin; DestDir: {userstartup}; Flags: ignoreversion
Source: полный путь до файла\File2.bin; DestDir: {pf}; Flags: ignoreversion
Source: полный путь до файла\File3.bin; DestDir: {app}; Flags: ignoreversion


Devils0411 07-04-2009 18:15 1087068

Есть учетная запись администратора (C:\Documents and Settings\Administrator), а есть ограниченная учетная запись (C:\Documents and Settings\User). Дык вот путь может быть другой ("C:\Documents and Settings\Buxgalter", "C:\Documents and Settings\student")

Serega 07-04-2009 18:22 1087074

Devils0411, так для этого есть константа {username} - это и будет ваше имя - student или Buxgalter...

Т.е. для того, чтоб попасть в папку C:\Documents and Settings\пользователь, надо записать:
{sd}\Documents and Settings\{username}

Также туда можно попасть, если записать:
{userdesktop}\..\

Devils0411 07-04-2009 18:48 1087090

Serega_, Решился все-таки сделать так:
Код:

[Setup]
AppName=Switch
AppVerName=Switch v 1.0
DefaultDirName={pf}\Switch
OutputDir=C:\
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: C:\File1.bin; DestDir: {app}; Flags: ignoreversion
Source: C:\File2.bin; DestDir: {app}; Flags: ignoreversion
Source: C:\File3.bin; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: "{userstartup}\Enable"; Filename: "{app}\File1.bin"
Name: "{userstartup}\Disable"; Filename: "{app}\File2.bin"

{userstartup} - создает ярлык в C:\Documents and Settings\Admin\Главное меню\Программы\Автозагрузка
А какая константа отвечает за ограниченную учетную запись скажем student или buxgalter - {username}? Она сама будет подставлять нужное имя?
P.S. С ярлыками будет удобней. Сразу не догадался.

Serega 07-04-2009 19:12 1087114

Цитата:

Цитата Devils0411
{userstartup} - создает ярлык в C:\Documents and Settings\Admin\Главное меню\Программы\Автозагрузка »

Она создаст ярлык в C:\Documents and Settings\имя текущего пользователя\Главное меню\Программы\Автозагрузка, т.е. под каким именем запускаете...
Цитата:

Цитата Devils0411
А какая константа отвечает за ограниченную учетную запись скажем student или buxgalter - {username}? Она сама будет подставлять нужное имя? »

дело в том, что это тоже имя текущего пользователя... хм...

Devils0411 07-04-2009 19:39 1087134

Вот в этом то и загвоздка. Да и еще. Что нужно прописать, чтоб не выдавало указать имя папки в меню "все программы"?

Serega 07-04-2009 19:55 1087151

Цитата:

Цитата Devils0411
Что нужно прописать, чтоб не выдавало указать имя папки в меню "все программы"? »

Вы имеете ввиду отключить страницу с выбором папки в меню "Пуск"? Добавьте в секцию [Setup] DisableProgramGroupPage=yes
Я так понял учётная запись Admin у вас одна на всех компьтерах? Если да, тогда запускаете инсталляцию из под учётной записи другого пользователя, а в скрипте записываете так:
[Icons]
Name: {sd}\Documents and Settings\Admin\Главное меню\Программы\Автозагрузка\Enable; Filename: {app}\File1.bin; WorkingDir: {app}
Name: {sd}\Documents and Settings\Admin\Главное меню\Программы\Автозагрузка\Disable; Filename: {app}\File2.bin; WorkingDir: {app}
Name: {userstartup}\Disable; Filename: {app}\File3.bin; WorkingDir: {app}
т.е. ярлык для файла File3.bin, будет создан для текущего пользователя, ярлыки для File1.bin и File2.bin - для пользователя Admin.

Serega 08-04-2009 20:29 1088238

Converter v.0.1.2

Описание

Converter - конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).

Использование

Пользоваться очень просто:
Нажимаете кнопку "Выбрать файл", в диалоге выбираете reg-файл и после завершения работы программы, рядом с reg-файлом, будет создан файл с таким же именем, но иметь расширение *.iss

Что нового
  • Версия 0.1.2
    • Корректно читаются и конвертируются из HEX данных в читаемый вид, значения ключей REG_EXPAND_SZ (expandsz) и REG_MULTI_SZ (multisz);
    • Добавлена поддержка удаления веток и параметров (записи вида [-ветка] и "параметр"=-);
    • Добавлена возможность интеграции в контекстное меню;
    • Добавлена функция drag&drop, т.е. reg-файл можно перетащить мышкой на форму и программа конвертирует его;
    • Добавлена возможность закрыть программу, после конвертирования;
    • Добавлена возможность использования флагов и констант;
    • Добавлена возможность открыть файл, после конвертирования;
    • Все неподдерживаемые в Inno Setup ключи реестра, теперь прописываются в секции кода;
    • Оптимизирован код программы и изменено оформление;
  • Версия 0.1.1
    • Исправлена ошибка с преобразованием: HKEY_LOCAL_MACHINE -> HKLM;
    • Исправлена ошибка, связанная с пустыми данными в reg-файле;
    • Убрал ограничение на размер входного reg-файла;
    • Исправлены мелкие недочёты и ошибки;


P.S.
Если вы заметили, что программа работает не корректно или с ошибками, пожалуйста напишите мне об этом.

boss911 08-04-2009 20:42 1088249

Цитата:

Цитата Serega_
Сделал небольшую программу Converter - конвертирует reg-файлы в формат *.iss »

Штука полезная, конечно. Но ведь зачем, когда есть ISTool для Inno, там это делается так же просто, где сразу можно прикрутить необходимые флаги, задачи и т.п., как для одной строки, так и для всех сразу.

Serega 08-04-2009 20:51 1088256

boss911, но это же ISTool, который нужно устанавливать, а здесь всего 500 кило и установка не нужна. Конвертирование из reg-файлов, это только начало, планирую немного расширить её функциональность в будущем.

katok888 08-04-2009 21:01 1088267

boss911, ISTool иногда коверкает рег файлы

katok888 08-04-2009 21:18 1088283

Serega_, ошибка при открытии файла:
Access violation at address 00460202 in module 'Converter.exe'. Read of address FFFFFFFF.

Serega 08-04-2009 21:26 1088284

katok888, а размер файла какой? Обычно, это происходит при открытии большого файла, я для этого и поставил ограничение...

P.S.
Покажите сам reg-файл.

katok888 08-04-2009 21:58 1088307

Serega_,
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mp3]
"PerceivedType"="audio"
"Content Type"="audio/mpeg"
@="AIMP.MP3"
"MP2.Last"="Custom"

[HKEY_CLASSES_ROOT\.mp3\OpenWithList]

[HKEY_CLASSES_ROOT\.mp3\OpenWithList\wmplayer.exe]

[HKEY_CLASSES_ROOT\.mp3\OpenWithProgIds]
"mp3file"=hex(0):

[HKEY_CLASSES_ROOT\.mp3\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"


Serega 08-04-2009 22:19 1088327

katok888, исправил и перезалил, попробуйте.

boss911 08-04-2009 23:08 1088382

Цитата:

Цитата Serega_
но это же ISTool, который нужно устанавливать »

Какой там устанавливать, оно работает как portable, тем более распаковать из оф. установщика труда не заставит, всего 1,7 Mb. Не убедил меня, если что. :)

Цитата:

Цитата katok888
ISTool иногда коверкает рег файлы »

Три года как уже пользуюсь Inno Setup, перепаковал у себя уже все, что можно было перепаковать, то, где это имеет смысл, ни разу не столкнулся с вышеописанной проблемой.

volk1234 09-04-2009 03:01 1088505

Serega_
добавил в шапку. Правьте пост #581 при появлении новых версий и доработке описания...

Serega 09-04-2009 11:01 1088689

Converter v.0.1.1 - исправил обнаруженные ошибки. Ссылка в шапке темы.

-Marshall- 10-04-2009 22:45 1090495

Скажите пожалуйста, а возможно ли реализовать такое, как у NSIS только в Inno Setup вот так:


Если да, то пожалуйста напишите как...

Я имею ввиду выбор компонентов :)

Serega 10-04-2009 23:50 1090539

-Marshall-, для отображения компонентов в виде дерева, вам понадобится установленные QuickStart Pack и InnoCompiler от Restools. Все ссылки есть в шапке. Вот пример скрипта:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
ComponentsListTVStyle=true

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b


-Marshall- 11-04-2009 14:38 1090898

Спасибо, с этим я разобрался :)
Можете еще помочь вот в чем: я делаю трансформ-пак в основном под себя, но! я не знаю как зарезервировать файлы... Пробовал "Полноценное резервирование файлов с копированием в отдельную папку", но он почему-то не хочет копировать...
Вот мой SHFileOperation.iss на примере shell32.dll:
читать дальше »

Код:

function BackupDir(const fromDir, toDir: string; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: string;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
              FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir  + SR.Name + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)  + #0#0;
      fos.pFrom  := PChar(_fromDir);
      fos.pTo    := PChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

{****************************************************************}
function MoveDir(const fromDir, toDir: string): Boolean;
begin
  Result := BackupDir(fromDir, toDir, True);
end;

{****************************************************************}
function CopyDir(const fromDir, toDir: string): Boolean;
begin
CopyDir('{sys}\shell32.dll', '{win}\Windows Se7en Theme\Backup');
  Result := BackupDir(fromDir, toDir, False);
end;

{****************************************************************}
function DelDir(dir: string; toRecycle: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _dir: string;
begin
    _dir:= RemoveBackslashUnlessRoot(dir) + #0#0;
    fos.wFunc  := FO_DELETE;
    fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  if toRecycle then
    fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
    fos.pFrom  := PChar(_dir);
  Result := (0 = ShFileOperation(fos));
end;

{****************************************************************}
function RenameDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: string;
begin
    _fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
    _toDir  := RemoveBackslashUnlessRoot(toDir) + #0#0;
    fos.wFunc  := FO_RENAME;
    fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;
    fos.pFrom  := PChar(_fromDir);
    fos.pTo    := PChar(_toDir);
  Result := (0 = ShFileOperation(fos));
end;


:help: Пробовал через константы "Windows"a...не помогло, пробовал ставить в строчке "Result := BackupDir(fromDir, toDir, False);" True вместо False. Что не так?
И если есть другие способы, то пожалуйста, скажите.......

Serega 11-04-2009 16:40 1091002

-Marshall-, вот пример SHFileOperation.iss, который у меня в архиве.
SHFileOperation.iss
Код:

;***************************************************************;
;****************** SHFileOperation.iss ************************;
;***************************************************************;
;* Include this file in project. Example:
;* #include "SHFileOperation.iss"
;***************************************************************;
;************************ 1 ************************************;
;* function CopyDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;*    CopyDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;*    CopyDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 2 ************************************;
;* function MoveDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;*    MoveDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;*    MoveDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 3 ************************************;
;* function DelDir(dir: string; toRecycle: Boolean): Boolean;
;*  If <toRecycle> is True, <dir> deleted in Recycle Bin.
;***************************************************************;
;************************ 4 ************************************;
;* function RenameDir(const fromDir, toDir: string): Boolean;
;***************************************************************;
;***************************************************************;
;***************************************************************;

[_Code]
type
  TSHFileOpStruct =  record
    Wnd: HWND;
    wFunc: UINT;
    pFrom: PChar;
    pTo: PChar;
    fFlags: Word; // FILEOP_FLAGS;
    fAnyOperationsAborted: BOOL;
    hNameMappings: HWND; // Pointer;
    lpszProgressTitle: PChar; { only used if FOF_SIMPLEPROGRESS }
  end;

const
// use in wFunc
  { $EXTERNALSYM FO_MOVE }
  FO_MOVE          = $0001;
  { $EXTERNALSYM FO_COPY }
  FO_COPY          = $0002;
  { $EXTERNALSYM FO_DELETE }
  FO_DELETE        = $0003;
  { $EXTERNALSYM FO_RENAME }
  FO_RENAME        = $0004;
// use in fFlags
  { $EXTERNALSYM FOF_MULTIDESTFILES }
  FOF_MULTIDESTFILES        = $0001;
  { $EXTERNALSYM FOF_CONFIRMMOUSE }
  FOF_CONFIRMMOUSE          = $0002;
  { $EXTERNALSYM FOF_SILENT }
  FOF_SILENT                = $0004;  { don't create progress/report }
  { $EXTERNALSYM FOF_RENAMEONCOLLISION }
  FOF_RENAMEONCOLLISION      = $0008;
  { $EXTERNALSYM FOF_NOCONFIRMATION }
  FOF_NOCONFIRMATION        = $0010;  { Don't prompt the user. }
  { $EXTERNALSYM FOF_WANTMAPPINGHANDLE }
  FOF_WANTMAPPINGHANDLE      = $0020;  { Fill in
SHFILEOPSTRUCT.hNameMappings
                                          Must be freed using
SHFreeNameMappings }
  { $EXTERNALSYM FOF_ALLOWUNDO }
  FOF_ALLOWUNDO              = $0040;
  { $EXTERNALSYM FOF_FILESONLY }
  FOF_FILESONLY              = $0080;  { on *.*, do only files }
  { $EXTERNALSYM FOF_SIMPLEPROGRESS }
  FOF_SIMPLEPROGRESS        = $0100;  { means don't show names of files }
  { $EXTERNALSYM FOF_NOCONFIRMMKDIR }
  FOF_NOCONFIRMMKDIR        = $0200;  { don't confirm making any
needed dirs }
  { $EXTERNALSYM FOF_NOERRORUI }
  FOF_NOERRORUI              = $0400;  { don't put up error UI }


function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer;
external 'SHFileOperation@shell32.dll stdcall';

{****************************************************************}
{****************************************************************}
{****************************************************************}

function BackupDir(const fromDir, toDir: string; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: string;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
              FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir  + SR.Name + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)  + #0#0;
      fos.pFrom  := PChar(_fromDir);
      fos.pTo    := PChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

{****************************************************************}
function MoveDir(const fromDir, toDir: string): Boolean;
begin
  Result := BackupDir(fromDir, toDir, True);
end;

{****************************************************************}
function CopyDir(const fromDir, toDir: string): Boolean;
begin
  Result := BackupDir(fromDir, toDir, False);
end;

{****************************************************************}
function DelDir(dir: string; toRecycle: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _dir: string;
begin
    _dir:= RemoveBackslashUnlessRoot(dir) + #0#0;
    fos.wFunc  := FO_DELETE;
    fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  if toRecycle then
    fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
    fos.pFrom  := PChar(_dir);
  Result := (0 = ShFileOperation(fos));
end;

{****************************************************************}
function RenameDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: string;
begin
    _fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
    _toDir  := RemoveBackslashUnlessRoot(toDir) + #0#0;
    fos.wFunc  := FO_RENAME;
    fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;
    fos.pFrom  := PChar(_fromDir);
    fos.pTo    := PChar(_toDir);
  Result := (0 = ShFileOperation(fos));
end;

{****************************************************************}
function FilesMaskOperation(const fromDir, toDir, fileMask: string; FileOp: Integer; EmptyDirRemove: Boolean; toRecycle: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: string;
  FSR, DSR: TFindRec;
  FindResult: Boolean;
  APath: string;
begin
  APath := AddBackslash(fromDir);
  FindResult := FindFirst(APath + fileMask, FSR);
  try
    while FindResult do
    begin
      if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        begin
          Case FileOp of
            FO_COPY:
              begin
                fos.wFunc  := FO_COPY;
              end;
            FO_MOVE:
              begin
                fos.wFunc  := FO_MOVE;
              end;
            FO_DELETE:
              begin
                fos.wFunc  := FO_DELETE;
                if toRecycle then fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
              end;
            FO_RENAME:
              begin
                fos.wFunc  := FO_RENAME;
              end;
          else
            ;
          end;
            fos.fFlags := fos.fFlags or FOF_FILESONLY or FOF_SILENT or
                  FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
            _fromDir:= APath + FSR.Name + #0#0;
            _toDir:= AddBackslash(toDir) + FSR.Name + #0#0;
            ForceDirectories(ExtractFilePath(_toDir));
            fos.pFrom  := PChar(_fromDir);
            fos.pTo    := PChar(_toDir);
            Result := (0 = ShFileOperation(fos));
        end;
      FindResult := FindNext(FSR);
    end;
    FindResult := FindFirst(APath + '*.*', DSR);
    while FindResult do
    begin
      if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
        not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} FilesMaskOperation(APath + DSR.Name, AddBackslash(toDir) + DSR.Name, fileMask, FileOp, EmptyDirRemove, toRecycle);
      FindResult := FindNext(DSR);
    end;
  finally
    FindClose(FSR);
    FindClose(DSR);
    if EmptyDirRemove then RemoveDir(APath);
  end;
end;

function CopyFiles(const fromDir, toDir, fileMask: string): Boolean;
begin
  Result := FilesMaskOperation(fromDir, toDir, fileMask,
        FO_COPY, False, False);
end;

function MoveFiles(const fromDir, toDir, fileMask: string): Boolean;
begin
  Result := FilesMaskOperation(fromDir, toDir, fileMask,
        FO_MOVE, True, False);
end;

function DelFiles(const fromDir, fileMask: string; toRecycle: Boolean ): Boolean;
begin
  Result := FilesMaskOperation(fromDir, '', fileMask,
        FO_DELETE, True, toRecycle);
end;
{****************************************************************}
{****************************************************************}


пример использования
Код:

;Как исправить небольшую ошибку в работе востановления файлов и папок при удалении, т.е. есть скрипт для этого но он
;не корректо работает с востановлением папок а именно получаеться так что деинсталлятор не может перезаписать папку, а просто
;создает в ней же свою копию (должно быть так имя_папки1\, а получаеться так имя_папки1\имя_папки1\), а вот с обычными
;файлами без папок все хорошо.

#include "SHFileOperation.iss"

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UpdateUninstallLogAppName=False

[Tasks]
Name: src; Description: Создать резервную копию файлов?

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; BeforeInstall: CreateBackup; Flags: ignoreversion

[_Code]
function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CreateBackup;
var
  srcFile, destFile: string;
  basePath, shortPath: string;
begin
  if IsTaskSelected('src') then
  begin
    basePath := ExpandConstant('{app}');
    srcFile := ExpandConstant(CurrentFileName);
    shortPath := srcFile;
    StringChangeEx(shortPath, basePath, '', True);
    destFile := ExpandConstant('{app}\Backup') + shortPath;
    ForceDirectories(ExtractFilePath(destFile));
    MoveFile(PChar(srcFile), PChar(destFile));
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usPostUninstall then
  begin
    MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}'));
    RemoveDir(ExpandConstant('{app}\Backup\'));
  end;
end;


-Marshall- 11-04-2009 18:50 1091120

Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; BeforeInstall: CreateBackup;

Я так понял он резервирует MyProg.exe? Или что? :search:
Если я неправильно изъяснился, то я поправлю себя: как сделать, чтоб Inno Setup скопировал нужные файлы в нужную директорию, независимо, где располагаются эти файлы. Например мне нужно, чтоб перед выполнением сценариев секции [Run], инсталлятор скопировал файл shell32.dll из {sys} в {app}\Backup

Serega 11-04-2009 21:52 1091280

Цитата:

Цитата -Marshall-
инсталлятор скопировал файл shell32.dll из {sys} в {app}\Backup »

читать дальше »

Source: {sys}\shell32.dll; DestDir: {app}\Backup; Flags: external skipifsourcedoesntexist

-Marshall- 11-04-2009 22:02 1091291

ааааа, по-ходу то, спс :)

МИШАНЧИК 12-04-2009 06:39 1091512

Подскажите пожалуйста!
Имеется ли возможность как-то сделать(в скрипте прописать) чтобы при деинсталяции скомпилированной мной программы деинсталятор сначала закрывал .exe процесс деинсталируемой программы?

Serega 12-04-2009 08:33 1091525

МИШАНЧИК, вот ссылка на пост, там как раз приведён пример и прикреплена необходимая .dll’ка.

volk1234 12-04-2009 12:42 1091706

Цитата:

Цитата Serega_
Большая просьба, если вы заметили, что программа работает не правильно, пожалуйста напишите об этом. »

На мой взгляд в таком случае в названии вашего конвертера должна присуствовать надпись beta - дабы пользователи были предупреждены...

МИШАНЧИК 12-04-2009 12:55 1091718

Serega_, а куда эту .dll’ку засунуть? В папку Инно, или в инсталятор?
Я так понял чтоб завершить процесс.exe при деинсталяции нужно в:
[UninstallRun]
Filename: {app}\процесс.exe; Flags: waituntilterminated
Правильно?

И ещё, скачал по ссылке Inno Setup 5.2.3 RU. Он при установке предлагает выбрать русский язык, а сама Инно всё равно после установки на английском. Где я неправ?

Serega 12-04-2009 13:16 1091743

Вложений: 1
Цитата:

Цитата volk1234
должна присуствовать надпись beta - дабы пользователи были предупреждены... »

Спасибо, сразу не сообразил... Исправил.

МИШАНЧИК
Цитата:

Цитата МИШАНЧИК
куда эту .dll’ку засунуть? В папку Инно, или в инсталятор? »

а туда, куда вам больше нравиться... :wink: извините, за неуместный юмор...
У меня допустим все необходимые .dll'ки живут в C:\Program Files\Inno Setup 5\Libraries\*
Цитата:

Цитата из скрипта
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion

т.е. нужно указывать полный путь - Source: полный путь до файла\ISTask.dll (при моём варианте расположения можно сократить до - compiler:Libraries\ISTask.dll, где compiler это каталог Inno setup), а DestDir: {app} - означает, что она будет скопирована в папку с приложением.
Цитата:

Цитата МИШАНЧИК
Я так понял чтоб завершить процесс.exe при деинсталяции нужно в »

Нет. Там полный пример, т.е. попробуйте скомпилировать сразу из того скрипта, предварительно указав путь до ISTask.dll или расположив её рядом со скриптом. Произведите установку и после запуска MyProg.exe попробуйте удалить программу. Появится сообщение с предложением закрыть программу. Одним словом попробуйте и сразу многое станет понятно.

Цитата:

Цитата МИШАНЧИК
а сама Инно всё равно после установки на английском »

точно не помню, так как сам пользуюсь расширенной версией от Restools, а она на английском...
Всё вспомнил, там должен идти отдельно файл Compil32.exe и именно он русифицирован.
Если его нет, то вот нашёл в старой версии, прикрепил.

МИШАНЧИК 12-04-2009 13:29 1091753

Serega_, а по поводу:
Цитата:

Цитата Serega_
Появится сообщение с предложением закрыть программу. »

А можно как-то чтоб без вывода окна для пользоавтеля? Чтоб деинсталятор сам принудительно закрывал программу(завершал процесс)?

Serega 12-04-2009 13:58 1091787

Цитата:

Цитата МИШАНЧИК
А можно как-то чтоб без вывода окна для пользоавтеля? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу MyProg?; Flags: postinstall nowait skipifsilent

; ниже поправьте название секции
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('MyProg.exe', false) then begin
    KillTask('MyProg.exe');
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end;
end;



P.S.
В прошлом сообщении я прикрепил Compil32 от 5.2.2, извините сразу не глянул... перезалил, теперь там 5.2.3

МИШАНЧИК 12-04-2009 15:04 1091843

Serega_, большое Вам спасибо!
Только я очень, очень начинающий и поэтому мне не очень ясно.
Допустим мне нужно при деинсталяции завершить 2 процесса:
1.Program1.exe
2.Program2.exe
скрипт будет выглядеть так:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\Program1.exe; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\Program2.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\Program1.exe; Description: Запустить программу Program1?; Flags: postinstall nowait skipifsilent

; ниже поправьте название секции(ЭТО Я НЕ ПОНЯЛ в какую секцию вставлять и нужно ли указывать - [code])
[code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask('Program1.exe', 'Program2.exe', false) then begin
KillTask('Program1.exe', 'Program2.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end;
end;
[code]

Serega 12-04-2009 15:37 1091869

Вложений: 1
МИШАНЧИК, чтоб было более понятно, решил прикрепить скрипт, просто на форуме воспринимается секция [code], как одноимённый тег...

P.S.
Скачайте справку на русском, ссылка в шапке, очень полезная вещь... :wink:

-Marshall- 12-04-2009 19:45 1092068

У меня еще один вопрос, по поводу секции Components. Сделал все по примеру и получилось, только меня не радует одно, что все оно идет в столбик, а я хотел бы, чтоб его можно было открывать и закрывать так, как на том же самом скрине Seven Remix

Serega 12-04-2009 20:07 1092084

-Marshall-, я же вам писал пример, который отображает список компонентов в виде дерева. Посмотрите внимательно пост, вы всё сделали как написано в скрипте? За отображение в виде дерева отвечает команда ComponentsListTVStyle=true. При этом имена компонентов должы иметь знак '\', пример:
a
a\a
a\a\a
a\a\a\a

-Marshall- 12-04-2009 22:32 1092197

Спасибо, я просто не обратил внимание на секцию [Setup] :meeting:

tem000 14-04-2009 14:20 1093747

Serega_, Подскажи пожалуйста, как можно сделать чтобы при выборе компонентов, какой то один пункт был отмечен и его нельзя было оключить (т.е чекбокс был бы не активным). И еще как сделать чтобы по умолчанию дерево компонентов было раскрыто или закрыто. Заранее спасибо...
читать дальше »
"примерно так"

Serega 14-04-2009 15:50 1093818

Цитата:

Цитата tem000
при выборе компонентов, какой то один пункт был отмечен и его нельзя было оключить »

используйте флаг fixed
Цитата:

Цитата tem000
как сделать чтобы по умолчанию дерево компонентов было раскрыто или закрыто »

по умолчанию список компонентов всегда развёрнут, а если необходимо чтоб он был свёрнут, надо использовать флаг collapsed.

Вопрос по скриншоту:
Снизу окна компонентов выводится их описание, а что выводится справа?

tem000 14-04-2009 16:32 1093847

Цитата:

Цитата Serega_
Снизу окна компонентов выводится их описание, а что выводится справа? »

Там отображаются маленькие превью, при выборе допустим какого нибудь скина отображается его маленькая картинка, или можно посмотреть какие иконки ставить и т.д. Прога называется AIMP2 MegaPack 2.51 Build 330.7 (сборка не моя скачал из инета) инсталятор сделан в Inno Setup, там в него много чего напихано распаковывается легко, скрипт очень большой единственное там по ходу в секции CODE много чего прописано на сколько я понял в том числе эта фишка с картинками.
читать дальше »
"читать дальше"


P.S Serega_, спасибо за быстрый ответ :teeth:

Serega 14-04-2009 17:02 1093874

Цитата:

Цитата tem000
единственное там по ходу в секции CODE много чего прописано на сколько я понял в том числе эта фишка с картинками »

на этой странице практически всё (90%) прописывается в секции Code.

Drongo 14-04-2009 20:14 1094050

Ребятки, вот нужно сделать такой инсталлятор, я сделаю, не вопрос, но есть один нюанс, нужно, чтобы у него было, во время установки, на выбор:
1. Или во время установки, в окне 800х600 (или любой другой оптимальный размер. На весь экран, крайний случай.) менялись картинки, как у игр, когда устанавливаешь игры, показываются некоторые фрагменты игровых моментов.
2. Или если первый вариант невозможен, то чтобы в окне самого инсталятора (можно размер самого окна инсталятора увеличить?), как в комментарии 463, и вот рядом нашёл в комменте 466 менялись картинки скриншотов, не одна была фиксировано, а менялись, скажем, после каждых пяти процентов установленной игры? Или как должно быть правильно? (Мне второй вариант понравился больше, можно как-то его прикрутить?)

P.S. Я никогда не делал такие инсталы, поэтому если не сложно, поясните на пальцах, куда скриншоты класть, и где что прописывать для отображения?

Drongo 14-04-2009 20:37 1094071

Решил поэкспериментировать со вторым вариантом, но тут пишет ошибку Undeclared identifier TIME_FOR_VIEW



Участок кода

Код:

...
begin
  currTime := currTime + 1;
  case currTime of
  {#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
  2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
  3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
  4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
  5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
  6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
  7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
  8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
  9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
  end;
  if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
...


Или весь код
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "StyleBuilder.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={{337AE44F-3DF6-4C55-AFCA-AAA9A6436F0E}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=E:\
OutputBaseFilename=setup
Compression=no
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
;Source: "D:\Контроль\TGTSoft\StyleBuilder\StyleBuilder.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Programms\Я_Автоустановка\BartPE\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Сode]
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
  URLLabel: TNewStaticText;
  TimerID: LongWord;
  currTime: Integer;
  SplashImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
  external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
  external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
  currTime := currTime + 1;
  case currTime of
  {#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
  2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
  3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
  4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
  5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
  6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
  7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
  8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
  9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
  end;
  if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
  BASS_SAMPLE_LOOP        = 4;  //повторение

type
  HSTREAM = DWORD;      //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
///////////////////////////////
var
  state, soft: boolean;
  Image1, Image2: TBitmapImage;
const
  NeedSize = 6;
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVEABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;

var
  ListBox: TListBox;

function GetLogicalDrives: DWORD;
  external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
  external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
  external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
  external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
  external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
  external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
  external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
  external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
  external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
  external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
  external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
  external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
  external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
  c, i: integer;
  stt, st, st1: string;
begin
  c := 0;
  st := s;

  for i := 1 to Length(st) do
  begin

    stt := copy(st, i, 1);
    if (stt = ' ') and (c >= 1) then
    begin
      st1 := st1;
      c := c + 1;
    end
    else if (stt = ' ') and (c = 0) then
    begin
      c := c + 1;
      st1 := st1 + stt;
    end
    else if (stt <> ' ') then
    begin
      c := 0;
      st1 := st1 + stt;
    end
  end;

  Result := st1;
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://game-torrent.info', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure ListBoxOnClick(Sender: TObject);
var
  NewLetter, OldString: string;
  i: Integer;
begin
  for i := 0 to ListBox.Items.Count - 1 do
  begin
    if ListBox.Selected[i] then
    begin
      NewLetter := Copy(ListBox.Items[i], 0, 1);
      OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
      WizardForm.DirEdit.Text := NewLetter + OldString;
    end;
  end;
end;


procedure InitializeWizard();
var
  Name1: string;
  i: Integer;
  Text: TNewStaticText;
  Path: string;
  FreeMB, TotalMB: Cardinal;
  drives: DWORD;

begin
  ExtractTemporaryFile('BASS.dll');
    ExtractTemporaryFile('my.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
begin
  BASS_Start();
  Name1:=ExpandConstant('{tmp}\my.mp3');
    i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
  if i <> 0 then
        begin
  BASS_ChannelPlay(i, True);
end
end

///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
  ExtractTemporaryFile('Image_1.bmp');
  ExtractTemporaryFile('Image_2.bmp');
  ExtractTemporaryFile('Image_3.bmp');
  ExtractTemporaryFile('Image_4.bmp');
  ExtractTemporaryFile('Image_5.bmp');
  ExtractTemporaryFile('Image_6.bmp');
  ExtractTemporaryFile('Image_7.bmp');
  ExtractTemporaryFile('Image_8.bmp');
  ExtractTemporaryFile('Image_9.bmp');
  ExtractTemporaryFile('Image_10.bmp');

  currTime := 0;

  WizardForm.ProgressGauge.Parent := WizardForm;
  WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
  WizardForm.ProgressGauge.Left := ScaleX(10);
  WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
  WizardForm.ProgressGauge.Height := 12;
  WizardForm.ProgressGauge.Hide;
  WizardForm.StatusLabel.Parent := WizardForm;
  WizardForm.StatusLabel.Left := ScaleX(10);
  WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
  WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
  WizardForm.StatusLabel.Hide;

  SplashImage := TBitmapImage.Create(WizardForm);
  SplashImage.Top := 0;
  SplashImage.Left := 0;
  SplashImage.Width := WizardForm.MainPanel.Width;
  SplashImage.Height := WizardForm.Bevel.Top;
  SplashImage.Parent := WizardForm.InnerPage;
  SplashImage.Stretch := True;
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'));
  SplashImage.Hide;
///////////////////////////////////////////////////////////

  URLLabel := TNewStaticText.Create(WizardForm);
  URLLabel.Caption := 'Special for Game-Torrent.info';
  URLLabel.Cursor := crHand;
  URLLabel.OnClick := @URLLabelOnClick;
  URLLabel.Parent := WizardForm;
  { Alter Font *after* setting Parent so the correct defaults are inherited first }
  URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
  URLLabel.Font.Color := clBlue;
  URLLabel.Top :=  330;
  URLLabel.Left := 30;

  ExtractTemporaryFile('Welcome.bmp')
  ExtractTemporaryFile('Finish.bmp')
  WizardForm.WizardSmallBitmapImage.Top:=0
  WizardForm.WizardSmallBitmapImage.Left:=0
  WizardForm.WizardSmallBitmapImage.Width:=498
  WizardForm.WizardSmallBitmapImage.Height:=58
  WizardForm.PageNameLabel.Visible:=false
  WizardForm.PageDescriptionLabel.Visible:=false
  WizardForm.FinishedLabel.Visible:=False
  WizardForm.FinishedHeadingLabel.Visible:=False
  WizardForm.WelcomeLabel1.Visible:=False
  WizardForm.WelcomeLabel2.Visible:=False
  Text := TNewStaticText.Create(WizardForm);
  Text.Top := 102;
  Text.Width := 332;
  Text.Height := 14;
  Text.Caption := 'Список жестких дисков и свободного места';
  Text.Parent := WizardForm.SelectDirPage;

  ListBox := TListBox.Create(WizardForm);
  ListBox.Top := 120;
  ListBox.Width := 332;
  ListBox.Height := ScaleY(90);
  ListBox.Parent := WizardForm.SelectDirPage;
  ListBox.OnClick := @ListBoxOnClick;
  ListBox.Font.Name := 'Courier New';
  ListBox.Font.Size := 10;
  ListBox.Font.Style := [fsBold];
  ListBox.Color := clBtnFace;

  drives := GetLogicalDrives();
  for i := 0 to 31 do
  begin
    if (drives and (1 shl i)) > 0 then
    begin
      Path := chr(ord('A') + i) + ':\';
      if GetDriveType(Path) = DRIVE_FIXED then
      begin
        GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
        if FreeMB>1024 then ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
        else ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + IntToStr(FreeMB) + ' MB');
      end;
    end;
  end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
  Path,s,z: String;
  FreeMB, TotalMB: Cardinal;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB < (NeedSize*1024) then
    begin
      if FreeMB>1024 then
      begin
      s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
      end
        else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
      MsgBox(s, mbCriticalError, MB_OK)
        Result := False;
    end;
    end;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
  Text: TNewStaticText;
  Windows,WindowsName: TMemo;
  Os,OS1,OS2,OS3,OS4,OS5,OS6,OS7,OS8,OS9,OS10,HARD: string; // строка с названием необходимой ОС
  ProcessorName: string;
  Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
  ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  ProcessorMHZ: Cardinal;
  StaticText: TNewStaticText;
  VidRam: integer;
  pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
    begin
      pfunc := WrapTimerProc(@OnTimer, 5);
      TimerID := SetTimer(0, 0, 1000, pfunc);

      WizardForm.InnerNotebook.Hide;
      WizardForm.Bevel1.Hide;
      WizardForm.MainPanel.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;
      URLLabel.Hide;

      WizardForm.ProgressGauge.Show;
      SplashImage.Show;
      WizardForm.StatusLabel.Show;

      WizardForm.CancelButton.Enabled :=True;
    end
  else
    begin
    URLLabel.Show;
    WizardForm.ProgressGauge.Hide;
    SplashImage.Hide;
    WizardForm.StatusLabel.Hide;
    //WizardForm.FilenameLabel.Hide;

    if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
    begin
      WizardForm.InnerNotebook.Show;
      WizardForm.Bevel1.Show;
      WizardForm.MainPanel.Show;
      WizardForm.PageNameLabel.Show;
      WizardForm.PageDescriptionLabel.Show;
    end;

    end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
  begin
  Image2:=TBitmapImage.Create(WizardForm)
 with Image2 do begin
  Left:=0
  Top:=0
  Width:=497
  Height:=313
  Parent:=WizardForm.FinishedPage
  Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
  end
  WizardForm.NextButton.Left:=380;
  WizardForm.NextButton.Top:=325;
 end
 //////////////////////////////
 If CurPageID=wpWelcome then
 begin
  If WizardForm.FindComponent('NextButton') is TButton
then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
  end
  begin
  Image1:=TBitmapImage.Create(WizardForm)
 with Image1 do begin
  Left:=0
  Top:=0
  Width:=497
  Height:=313
  Parent:=WizardForm.WelcomePage
  Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
  end
  end
  if CurPageID=wpSelectTasks then
 begin
  If WizardForm.FindComponent('NextButton') is TButton
then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
  If WizardForm.FindComponent('CancelButton') is TButton
then
  TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
  end
 if CurPageID = wpUserInfo then
  begin
  //подменяем сраницу информации о пользователе на информацию об ОС
    wizardForm.UserInfoNameEdit.visible:=false;
    wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
    wizardForm.UserInfoNameLabel.visible:=false;
    wizardForm.UserInfoOrgLabel.visible:=false;
    wizardForm.UserInfoOrgEdit.visible:=false;
    wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
    wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
    wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
    RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
    RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

  OS:=' Microsoft Windows XP Service Pack 2';
  OS10:=' Microsoft Windows XP Service Pack 3'; //строка является записью из реестра
  OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
  OS2:=' Windows Vista (TM) Ultimate ';
  OS3:=' Windows Vista (TM) Home Basic ';
  OS4:=' Windows Vista (TM) Home Premium ';
  OS5:=' Windows Vista (TM) Business ';
  OS6:=' Windows Vista (TM) Ultimate Service Pack 1'
  OS7:=' Windows Vista (TM) Home Basic Service Pack 1';
  OS8:=' Windows Vista (TM) Home Premium Service Pack 1';
  OS9:=' Windows Vista (TM) Business Service Pack 1';
  HARD:='Все компоненты удовлетворяют требованиям игры.';
  Windows := TMemo.Create(WizardForm);

  StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with StaticText do begin
    Left := 0;
    Top := 52;
    Width := 417;
    Height := 14;
    Caption := 'Все компоненты удовлетворяют требованиям игры.';
    Parent := WizardForm.UserInfoPage;
    StaticText.font.color:=clGreen;
  end


  with Windows do
  begin
    Text := ' Операц. система';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    Processor := TMemo.Create(WizardForm);
  with Processor do begin
    Text := ' Процессор';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    VideoCardPanel := TMemo.Create(WizardForm);
  with VideoCardPanel do begin
    Text := ' Видеоадаптер';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    AudioCardPanel := TMemo.Create(WizardForm);
  with AudioCardPanel do begin
    Text := ' Звуковая карта';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end
    RAMPanel := TMemo.Create(WizardForm);
  with RAMPanel do begin
    Text := ' ОЗУ';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

  end

  PageFilePanel := TMemo.Create(WizardForm);
  with PageFilePanel do begin
    Text := ' Файл подкачки';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

    ProcessorNamePanel := TMemo.Create(WizardForm);
  with ProcessorNamePanel do begin

    Text :=  DelSP(ProcessorName) + '  ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if ProcessorMHZ < 2800 then
  begin
    ProcessorNamePanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;

  VideoCardNamePanel := TMemo.Create(WizardForm);
  with VideoCardNamePanel do begin
    Text :=  ' ' + GetVideoCardName + 'MB'; //+'    ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
    Parent := WizardForm.UserInfoPage;
    VidrAM := GetVidMemLocal / 1000000;

    if VidRam > 127 then
    begin
      if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
      else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
      else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
      else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
    end;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if GetVidMemLocal < 255000000 then //128 MB
  begin
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
    VideoCardNamePanel.Color := $ccccff;
  end;


  end
    AudioCardNamePanel := TMemo.Create(WizardForm);
  with AudioCardNamePanel do begin
    Text := ' ' + GetSoundCardName;
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

    ReadOnly := True;

  end
    RAMTotalPanel := TMemo.Create(WizardForm);
  with RAMTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPhys + 1 < 1024 then
  begin
    RAMTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;

  PageFileTotalPanel := TMemo.Create(WizardForm);
  with PageFileTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPage) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPage < 1247 then
  begin
    PageFileTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;


  end

  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
  begin

    WindowsName := TMemo.Create(WizardForm);
    with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;
  end

  end

 end;

 // Проверка Windows 9x
  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
  begin
  WindowsName := TMemo.Create(WizardForm);
  with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end

  end;


  if OS=(WindowsName.Text) then state:=true else
  if OS2=(WindowsName.Text) then state:=true else
  if OS3=(WindowsName.Text) then state:=true else
  if OS4=(WindowsName.Text) then state:=true else
  if OS5=(WindowsName.Text) then state:=true else
  if OS6=(WindowsName.Text) then state:=true else
  if OS7=(WindowsName.Text) then state:=true else
  if OS8=(WindowsName.Text) then state:=true else
  if OS9=(WindowsName.Text) then state:=true else
  if OS10=(WindowsName.Text) then state:=true else
  if OS1=(WindowsName.Text) then state:=true else state:=false;

////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
  if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
  Text := TNewStaticText.Create(WizardForm);
    with Text do begin
    Left := 0;
    Top := 0;
    Width := 417;
    Height := 14;
    if state then
    begin
      Font.Color:=clGreen;
      WindowsName.color:=$CCFFCC;
    // SP_Num.color:=$CCFFCC;
      Caption := 'Операционная система соответствует требованиям игры.';
    end
    else
    begin
      Font.Color:=clREd;
      WindowsName.color:=clRed;

      WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
      WindowsName.Top := ScaleY(20);
      WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
      WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
      WindowsName.ReadOnly := True;



      Caption := 'Операционная система не соответствует требованиям игры.';
    end
    Parent := WizardForm.UserInfoPage;
  end
    Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with Text do begin
    Left := 0;
    Top := 220;
    Width := 417;
    Height := 14;
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
    Parent := WizardForm.UserInfoPage;
  end

 end;
end;

procedure DeInitializeSetup();
begin
 KillTimer(0, TimerID);
 BASS_Stop(); //нужно для остановки проигрывания
 BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

;[Run]
;Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent



Что и где объявить?

Serega 14-04-2009 21:05 1094098

Drongo, по первому вопросу, лучше воспользоваться GameScript Generator, а по второму пример, названия картинок и путь до них, нужно поправить в секции [Files], там единственное идёт показ по времени, где-то у меня был пример по процентам, поищу...

Цитата:

Цитата Drongo
Undeclared identifier TIME_FOR_VIEW »

надо добавить в самое начало скрипта:
#define TIME_FOR_VIEW 1

Drongo 15-04-2009 12:24 1094621

Цитата:

Цитата Serega_
там единст