powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NSIS или Inno Setup?
159 сообщений из 159, показаны все 7 страниц
NSIS или Inno Setup?
    #35118186
Всем привет.
Неделю разбирался с инсталляторами NSIS и Inno Setup.

NSIS вроде попродвинутей на первый взгляд, но и Inno хорош: прост и легко расширяется, скриптовый язык - почти Delphi.

Лично мне нравится больше Inno (проще).

Нужно сделать окончательный выбор.
Помогите, ОК?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35118201
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неделю разбирались с чем? что нужно от дистрибутива (есть ситуации, когда ни один из названных задаче соответствовать не будет)?.... просто упаковать и сжать? вауля рар или зип
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35118214
Альтнеделю разбирались с чем?

Со всем. Всю неделю. :)

Альт что нужно от дистрибутива (есть ситуации, когда ни один из названных задаче соответствовать не будет)?.... просто упаковать и сжать? вауля рар или зип
Так и было вначале.
Потом выяснилось, что в разных WinХХ не все нужные библиотечки есть.
Т.е., в зависимости "от", нужно проверять и инсталлить соответствующие недостающие части.

Кроме того, выяснилось, что есть масса клиентов с Win98, в которой сервисы не заюзаешь. Пришлось не только программку, но и ее инсталлятор. Короче, в дополнение к self - exe - RAR - архиву вырос солидный exe - шник, все это отслеживающий.
В общем, пришел к выводу, что делать это нужно, но нормальными срествами, не размазывая по Delphi-RAR-*.bat-...

Вот такие вот пироги.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35118229
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сомневающийся в...Вот такие вот пироги.

Бери NSIS и не парься. Проверен. А что не "идеен", так то пусть M$ пишет жалобы в ООН.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35118231
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это что... вдруг вам понадобится вин.сертификат на по... и придется делать msi, а это еще и не факт, что запустится на клиентах и придется таскать до кучи дистрибутивы инсталляторов инсталляторов ... всякое в жизни бывает... выбирайте любой, к какому душа лежит (зы: Inno мне тоже ближе... да и распаковывается он закрытый тоже хорошо)))
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35121000
Грышохайд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
InnoSetup
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35121316
Поработал я сегодня с NSIS.
Не подумайте плохого, но вот что я вам сейчас скажу:

Ненавижу goto!
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35121349
А как ч/з NSIS установить для сервиса действия при сбоях?

(ну, те, что в sc.exe задаются как:
sc failure My_Service reset= 0 actions= restart/1000
)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35122065
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ч/з NSIS управляют сервисами с помощью нескольких плагинов.

Ни один из рассмотренных мной плагинов ничего не знает о функции ChangeServiceConfig2, т.е., придется писать API - вызов самостоятельно.

Либо ч/з SC.EXE, включив эту программульку (менее 50 кб) в дистрибутив.

Посему рекомендую заюзать Inno: там работа с API более "родная" для дельфистов.
Никакого скриптового "бейска", норамальный скриптовый Паскаль.

ИМХО.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35122076
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставлю свое слово. Мое мнение. Inno Setup.
Долой всякие конструкции типа pup, push! Разработчик должен думать о задачах, а не о стеке. Потому как сроки и премии. :) А функционала, котрого не хватает, можно и самому дописать. В Delphi например.
Так то вот. ;)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35122203
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maloi_alexВставлю свое слово. Мое мнение. Inno Setup.
Долой всякие конструкции типа pup, push! Разработчик должен думать о задачах, а не о стеке. Потому как сроки и премии. :) А функционала, котрого не хватает, можно и самому дописать. В Delphi например.
Так то вот. ;)

1. pop/push - это жесть.
2. goto - это жесть дважды. Я "морщил моск", разбираясь в метках Inno. Читабельность типа хуже, если сложный скрипт.
3. А какого функционала в Inno не хватает(по сравнению с NSIS), если не секрет? ИМХО, если "сложности" решаются с привлечением скрипта, то пофиг, что юзать. Только что скрипт на паскале поближе к народу, владеющему Delphi. ИМХО.

Возникла мысль: реализовать "вкомпиляцию" поставляемых файлов в exe-модуль несложно на самом Delphi, используя загрузку ресурсов. Надо будет покурить это. Как только все дела переделаю, сяду и пойму, что мне нечем заняться. :)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35122333
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhide
Кстати, ты давай, не увиливай, расскажи-ка про свои терабайты и десятки тысяч пользователей.
Сколько у тебя того и другого.
Просим.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35122989
NMomentomore666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело вкуса :) яб выбрал инно ну нравиться он мне и все тут
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35125489
Svift
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
давно пользуюсь Inno Setup, функциональности вполне хватает !
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35159491
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSIS лучше.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35160497
Фотография alex_od
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Inno Setup, просто и удобно !!!
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35160805
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паскаль в Inno Setup, это, конечно, гуд, но:
- при обращении к API - функциям нельзя создать структуры с указателями. Что довольно часто бывает нужно. Приходится писать внешние плагинчики. Напримеро, свои dll - ки. В обязательном порядке.
- например, динамическом при создании списков задач (etc) нельзя воспользоваться встроенными средствами: набор задач (etc) определяется во время компиляции.
- при незначительном изменении дистрибутива чаще всего патчики получаются не меньше исходного дистрибутива.
...
А так да, просто и удобно. Если что-то не очень сложное - то Inno Setup самое то.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35183954
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...а еще (IMHO) Inno плохо подходит для "больших" инсталляций.

"Больших" - это когда о-о-о-чень много компонентов, вложенных друг в друга ("компонент" в Inno == "секция" в NSIS): ветви дерева компонентов в INNO не сворачиваются. Атас полный получается, а не видок у инсталлятора.

... правда, у NSIS труднее реализовать сложную логику зависимостей компонентов.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35227900
К600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NSIS вата полная уже 10 раз убеждал себя в этом... Inno намного удобнее и меньше багает, пока проверяешь сборку...

Разработчики NSIS придумали новый велосипед и на этом велосипеде ещё както умудрились написать примеры, которые как с козла - молока.

Справка в НСИС ни о чём =). Справка же в Инно Сетап настолько информативна, что дурак разберётся...

Инно рулеЗ!
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35227969
NetObserver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуюсь Inno уже пару лет - рекомендую.
Еще могу посоветовать GUI к нему - ISTool.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35228171
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К600NSIS вата полная уже 10 раз убеждал себя в этом... Inno намного удобнее и меньше багает, пока проверяешь сборку...

Разработчики NSIS придумали новый велосипед и на этом велосипеде ещё както умудрились написать примеры, которые как с козла - молока.

Справка в НСИС ни о чём =). Справка же в Инно Сетап настолько информативна, что дурак разберётся...

Инно рулеЗ!

1. NSIS ничуть не сложнее INNO.

2. Справка в обоих для дурака рассчитана (проверено на себе. )

3. Примеров для NSIS столько, что действительно, недолго растеряться. Еще более обширная база примеров есть на сайте разработчика. Зато в этих примерах есть практически все.

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

5. С NSIS идет дикое количество плагинов - и для мат расчетов, и для API, и для более удобной обработки условий.

6. Гуй для NSIS есть, и очень удобные. Это и Eclipse с плагинами, и Notepad++ (с плагином), и много чего еще. IS Tools тоже хорош, но полная лажа по сравнению.
Я использую очень удобный инструмент - Venus (бесплатен для личного испоьзования).

7. И Inno, и NSIS просты, бесплатны, оба являются компиляторами инсталляторов из скриптов - сценариев, а еще у Inno скриптовый язык - паскаль, что есть гут. Но паскаль с сильными ограничениями, что не гут, например, при работе с API (иногда). В Inno скрипт можно подгружать извне и интерпретировать по мере надобности, в NSIS все компилится сразу. Зато у NSIS все (ну, почти все) ошибки в скрипте проверяются в момент компиляции.

8. У NSIS масса скинов. И легко добавить свой. Фигня, конечно, но иногда бывает нужно.

9. Инно рулез, ОК. ИМХО, его быстрее освоить.

10. Но для создания инсталлятора в режиме "как пожелает моя левая нога" все же удобнее NSIS. У Inno слишком много ограничений (кроме отмеченного выше, я не нашел ограничений).
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35228592
Фотография FlyD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManнапример, при работе с API (иногда)не замечал, честно... пока все устраивало...
NextManУ Inno слишком много ограниченийнапример?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35228753
K600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну пардон... NSIS мне уже 3тий день мозги полоскает. А с Inno проблем пока не было.

Если же в Inno без разницы как распологаются секции кода и др. ([Code], [Files], ...), он их просто напросто жуёт и всё верно собирает. ТО! в NSIS грабли на граблях. Во-первых: не знаешь куда засунуть той или иной пример из справки, потом если же каким-то чудом он это прожуёт, то ещё нет вероятности, что это заработает. В пример приведу такое вот шаманство с VersionInfo инсталлятора - сначала просто скопировал и вставил после инсертов диалогов код с инфой, результат - написал что таких функций нет. Ладно едем дальше. Наткнулся на пример как раз с VersionInfo, скопипастил в свой проект и о чудо всё заработало! (хотя все названия функций и параметры точь-в-точь как в примере). Ну это ещё полбеды. Решил навести кое-какую последовательность (вот тут то самое интересное) и получил крякозябры в свойствах ехе файла инсталлятора, во вкладе "Версия".

Да и под конец меня додолбало то, что нельзя никак изменить надпись Nullsoft Install System vX.XX. Она либо вообще скрывается, либо 0 реакции на сообщение WM_SETTEXT.

А вот насчёт справки никак не соглашусь, что в NSIS она такая же, как у Inno. В справку по NSIS смотришь и тупо смотришь дальше =). Ещё самый улёт когда ты ищешь описание функции, тебе потом показывается офигенно киллометровая страница и вот на ней уже нужно самому искать, листая скроллингом =). А ещё нахрена в справке нужны версии всех релизов со списком исправленных косяков, тупо сделано, иногда ищешь что-то, вылезает весь список этих версий и среди них запрятана золотая строчка, которую изначально искал.

Пробовал сделать инсталлятор который бы качал файлы из сети (чисто вот только из-за этого и решил попробовать сделать инсталлятор в NSIS, так то инсталлятор на Inno уже написан), просто не хотелось писать свой плагин для Inno. Ну в общем добрался до плагина NSISdl и приехал =). Сколько я его не мурыжил так он и не качает файлы (resolving host и ещё какая-то ошибка была).

Видимо снова нужно с бубном побегать пока не произойдёт чудо и NSIS не соизволит скомпилиться.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35228757
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600
K> Ещё самый улёт когда ты ищешь описание функции, тебе потом показывается
K> офигенно киллометровая страница и вот на ней уже нужно самому искать,
K> листая скроллингом =). Чего крутить-листать ? Поиск есть же.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229247
K600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну поищи к примеру "Branding", затем выбери "Instructions" и ... приходится листать искать ))))
а ты говоришь поиск =). Бывает что много выделено на странице и можно шустро прокрутить и найти эту кучку выделенных.

Поиск то всё норм работает, просто Нуллсофтовцы туповато справку написали, кучку функций засунули на одну страницу и назвали её "Instructions" ))). В Inno каждая функция описана с примерами, с параметрами и каждый из них описан.

п.с. сейчас вставил пример с этой страницы http://nsis.sourceforge.net/Download_Using_Mirrors , так установщик при запуске вообще пишет такое вот: "Дистрибутив повреждён: недопустимый код".

В общем хотите инсталлятор с фичами* - используйте NSIS. Хотите простоты и удобства - используйте Inno Setup.

*Фича - трудно исправимые баги.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229291
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FlyD NextManнапример, при работе с API (иногда)не замечал, честно... пока все устраивало...


Пример: для вызова функции API нужно передать структуру, один из элементов которой ссылается на другую структуру. Встроенная версия Паскаля не позволяет такие вольности.
Да и вообще нет возможности работать с указателями. Приходится писать dll-ку на Delphi. Не очень, но иногда напряжно.
FlyD NextManУ Inno слишком много ограниченийнапример?
Уже выше вроде писал:
- Нет возможности запуска в silent - режиме без явного указания в командной строке. (уже знаю как обойти, грязным хаком ). Ладно, мелочь - но иногда нужно!
- Нет возможности в рантайме определить набор компонентов (определяемый, например, набором вспомогательных файлов). Можно, конечно, строить кастом-странички, но потом непросто скрестить с ними "встроенную" в Inno систему деинсталляции. (Возможно, сложно только для меня). Это мне точно нужно.
- Нет возможности компактно отображать болшое дерево зависимых компонентов (для отображения используется вовсе не TreeView, поэтому свернуть/развернуть ветви нельзя). У меня, к примеру, демка включает несколько десятков элементов инсталляции - в Inno выглядела жутко. Кто-то скажет - "финифлюшки". Может быть, но внешний вид тоже немаловажная вещь.
Можно обойти, построив "настоящее" дерево самому, но не очень приятно и трудно совместить с деинсталлятором.
- Сложно делать апдейт-инсталляции (можно, но много ручной работы). Да, я ленив.
- Сложнее кастомизация предопределенных страниц (знаю-знаю, даже есть инструменты, но все "левые", много приходится "напильником" доделывать). Это точно ограничение.
- Ну, размер ядра (и прочие мелочи вроде скинов, прозрачных иконок и т.д.) - это не особо интересно....
- Еще что-то по мелочам (но мелочи иногда доволно раздражающие).


Язык в NSIS, конечно, не такой красивый, как Pascal, но зато компилится сразу: нет нужды отлавливать трудно доступные ветви в алгоритме инсталляции. (Как-то раз было, что при компиляции дистрибутива на Inno вышло, что ветка для инсталляции под Win98 оказалась вообще написана с синтаксическими ошибками. Компилятор Inno съел, т.к. скриптовая система интепретируемая. Сами виноваты, конечно, но NSIS просто такого не пропускает. Впрочем в интепретируемой системе тоже есть свои плюсы).
Кроме того, уже встроенные в "стандартную" поставку NSIS плагины неплохо расширяют язык, так что по гибкости язык оставляет Паскаль позади (но не по привычной Дельфистам наглядности, конечно).
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229314
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600Ну пардон... NSIS мне уже 3тий день мозги ...
1. Хи-хи.
2. Такая уж наша боярская доля...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229325
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600
K> Ещё самый улёт когда ты ищешь описание функции, тебе потом показывается
K> офигенно киллометровая страница и вот на ней уже нужно самому искать,
K> листая скроллингом =).
Ну, е-мое...
Юзай Venus (и проч), писал же уже.
Там сбоку такой "браузер", в нем все секции/подсекции и функции. Клацнул мышом - и сразу в код попал:
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229437
K600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКроме того, уже встроенные в "стандартную" поставку NSIS плагины неплохо расширяют язык, так что по гибкости язык оставляет Паскаль позади (но не по привычной Дельфистам наглядности, конечно).

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

Кстати: я попробовал расширить NSIS - ничего не вышло.

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

- Сложнее кастомизация предопределенных страниц (знаю-знаю, даже есть инструменты, но все "левые", много приходится "напильником" доделывать). Это точно ограничение.

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

В NSIS самое главное ограничение - непонятность что куда пихать и как это использовать.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35229943
K600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan помоги мне плиз. Если ты так хорошо разбираешься в NSIS, напиши простенький инсталлятор, который качал бы 2 или 3 файла с сайта (любого). Напишешь мне сюда, ок?
Заранее спасибо =)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35230144
K600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё уже не нужно ))) Хотя не.. лучше напиши, вдруг кому-нибудь будет полезно узнать.
Нашёл такую штуку ISTool, в ней есть библа которая умеет качать файлы и будет покучнее библы NSISdl.

Кстати в Inno есть режим /SILENT и /VERYSILENT. В справке написано.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231158
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600...
Кстати в Inno есть режим /SILENT и /VERYSILENT. В справке написано.
Ключи запуска , а не "режимы".

А ты говоришь, что справка понятная.

Заставку они не отключают.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231164
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan...
Ключи запуска , а не "режимы".

Тьфу ты.
Не "ключи запуска", а параметры запуска инсталлятора для командной строки.
Так вот, без явного задания этих ключей silent режим не-воз-мо-жен.
Так сделано с целью и т.д. (см. выше).
Блин, уже третий раз одно и то же повторяю...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231189
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManТак вот, без явного задания этих ключей silent режим не-воз-мо-жен.
Думаю, не один инсталлер не сможет. Разве, что инсталлер изначально не заточен под
батч установку ...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231194
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600...простенький инсталлятор, который качал бы 2 или 3 файла с сайта (любого)...


C:\Program Files\NSIS\Docs\NSISdl\ReadMe.txt
NSISdl 1.3 - плагин NSIS для HTTP загрузки
---------------------------------------------

Копирайт (C) 2001-2002 Ярослав Файбишенко и Жюстин Френкел

Данный плагин может быть использован в NSIS для загрузки файлов ч/з http.

Для подключения к интернету используйте плагин Dialer.

ПРИМЕНЕНИЕ
------------

NSISdl::download http://www.domain.com/file localfile.exe

Для задания таймаута (в миллисекундах) можете указать /TIMEOUT:

NSISdl::download /TIMEOUT=30000 http://www.domain.com/file localfile.exe

Возвращаемое значение будет помещено в стек:

"cancel" - если хрень
"success" - если ОК
В случае ошибки - строка, описывающая ошибку.

Если вы не хотите смотреть на прогрессбар в процессе загрузки, используйте NSISdl::download_quiet.

Пример:

NSISdl::download http://www.domain.com/file localfile.exe
Pop $R0 ;Получаем возвращаемое значение
StrCmp $R0 "success" +3
MessageBox MB_OK "Фик вам: $R0"
Quit

Прочие примеры можно найти в директории с примерами, файл waplugin.nsi.

ПРОКСИ
-------

NSISdl поддерживает только базовые конфигурации прокси. Он не поддерживает прокси, которые требуют аутентификацию, скрипт автоматического конфигурирования и т.д.
NSISdl читает конфигурацию прокси из Internet Explorer - ского ключа реестра:
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings.
Читается и разбирается информация в ProxyEnable и в ProxyServer.

Если вы не хотите, чтобы NSISdl использовал настройки Internet Explorer-ра, используйте флаг /NOIEPROXY. Флаг /NOIEPROXY должен быть после флагов /TRANSLATE и /TIMEOUT.
Например:

- если вам нужно сконфигурировать прокси самостоятельно, используем флаг /PROXY:

NSISdl::download /NOIEPROXY http://www.domain.com/file localfile.exe
NSISdl::download /TIMEOUT=30000 /NOIEPROXY http://www.domain.com/file localfile.exe
NSISdl::download /PROXY proxy.whatever.com http://www.domain.com/file localfile.exe
NSISdl::download /PROXY proxy.whatever.com:8080 http://www.domain.com/file localfile.exe

ПЕРЕВОД СООБЩЕНИЙ
---------------------

Для перевода сообщений NSISdl в строку вызова добавляем нужные значения:

/TRANSLATE2 downloading connecting second minute hour seconds minutes hours progress

Значениями по умолчанию являются:

downloading - "Downloading %s"
connecting - "Connecting ..."
second - " (1 second remaining)"
minute - " (1 minute remaining)"
hour - " (1 hour remaining)"
seconds - " (%u seconds remaining)"
minutes - " (%u minutes remaining)"
hours - " (%u hours remaining)"
progress - "%skB (%d%%) of %skB @ %u.%01ukB/s"

Старый ключ /TRANSLATE все еще можо юзать, (оставлен для совместимости с предыд. версиями).

/TRANSLATE downloading connecting second minute hour plural progress remianing

Значениями по умолчанию являются:

downloading - "Downloading %s"
connecting - "Connecting ..."
second - "second"
minute - "minute"
hour - "hour"
plural - "s"
progress - "%dkB (%d%%) of %ukB @ %d.%01dkB/s"
remaining - " (%d %s%s remaining)"

Ключи /TRANSLATE и /TRANSLATE2 должны до флага /TIMEOUT.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231201
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Думаю, не один инсталлер не сможет....
NSIS может:

NSIS user manual 4.9.14.16 SetSilent
silent | normal


Sets the installer to silent mode or normal mode. See SilentInstall for more information about silent installations. Can only be used in .onInit.

Т.е. реализуем коллбэк - функцию .onInit так:
.onInitFunction .onInit
SetSilent silent
FunctionEnd
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231209
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManNSIS может
Соглашусь, но с тем, что тихая установка нужна, как часть другой итерактивной установки.
Может быть возможностей не хватает для интеграции нескольких инсталляторов ?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231215
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Соглашусь, но с тем, что тихая установка нужна, как часть другой итерактивной установки.

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

Dmitry ArefievМожет быть возможностей не хватает для интеграции нескольких инсталляторов ?
Пардон, не понял вопроса...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231244
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K600...
...нельзя никак изменить надпись Nullsoft Install System vX.XX. Она либо вообще скрывается, либо 0 реакции на сообщение WM_SETTEXT.
...


NSIS User Manual 4.8.1.6
BrandingText
/TRIM(LEFT|RIGHT|CENTER) text
Задает значение текста (по умолчанию "Nullsoft Install System vX.XX") , которое показывается в нижней части окна инсталляции. Установка пустого значения ("") возвращает к значению по умолчанию; чтобы убрать сообщение совсем, используем " " (пробел)...
...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231381
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev> Соглашусь, но с тем, что тихая установка нужна, как часть другой итерактивной
установки.

Чего-чего? А что, там так много вариантов?

Dmitry Arefiev> Может быть возможностей не хватает для интеграции нескольких инсталляторов ?

А вот с этим всегда было (и в общем-то еще долго будет) туго.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35231777
К600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan K600...
...нельзя никак изменить надпись Nullsoft Install System vX.XX. Она либо вообще скрывается, либо 0 реакции на сообщение WM_SETTEXT.
...


NSIS User Manual 4.8.1.6
BrandingText
/TRIM(LEFT|RIGHT|CENTER) text
Задает значение текста (по умолчанию "Nullsoft Install System vX.XX") , которое показывается в нижней части окна инсталляции. Установка пустого значения ("") возвращает к значению по умолчанию; чтобы убрать сообщение совсем, используем " " (пробел)...
...

да толку то... прбовал уже ... NSIS пишет что нет такой функции и всё, говорю же не понятно что куда писать в этом инсталляторе - грабли на граблях.

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

п.с.с скрытый режим редко нужен, если только ты не хакер и не инсталлируешь вирусы)))
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35233943
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К600NSIS пишет что нет такой функции и всё, говорю же не понятно что куда писать в этом инсталляторе - грабли на граблях.
Безусловно, если вам что-то не понятно, то это грабли Нсис :)

К600п.с.с скрытый режим редко нужен, если только ты не хакер и не инсталлируешь вирусы)))
Скрытый режим очень даже удобен для развертывания программного комплекса. Особенно, когда разработка отдельных его частей ведется разными отделами (которые могут находится даже в разных странах).
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35234390
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К600
да толку то... прбовал уже ... NSIS пишет что нет такой функции и всё, говорю же не понятно что куда писать в этом инсталляторе - грабли на граблях.

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

п.с.с скрытый режим редко нужен, если только ты не хакер и не инсталлируешь вирусы)))
Ну что ты, в самом деле...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
;--------------------------------
;Include Modern UI

  !include "MUI2.nsh"
	
; Краткое описание компонентов:
!define MUI_COMPONENTSPAGE_NODESC

;--------------------------------
  ;Name and file
  Name "K600 тормоз"
  OutFile SetupHttpDownload.exe

  ;Default installation folder
  InstallDir "$APPDATA\K600"
  
  ;Get installation folder from registry if available
  InstallDirRegKey HKCU "Software\K600" ""


XPStyle on

;--------------------------------
;Pages

  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  
  ;Start Menu Folder Page Configuration
  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Modern UI Test" 
  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
  
  ;!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
  
  !insertmacro MUI_PAGE_INSTFILES
  
;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "Russian"

;--------------------------------
;Installer Sections



BrandingText "К600 аццкой тормоз"

Section "К600 тормоз"
  MessageBox MB_OK "К600 аццкий тормоз"
SectionEnd

Section "Грузить новую версию NSIS"
	NSISdl::download /TRANSLATE2 "Грузица %s" "Ждем конекта ..." \
	 " (асталась адна сикунда)" " (асталась адна минута)" " (асталась адна годына)" \
	 " (еще %u кикунд)" " (ище %u минут(ы))" " (жди %u часов(ы!))" \
	 "%skB (%d%%) из %skB @ %u.%01ukB/s" \
	 http://garr.dl.sourceforge.net/sourceforge/nsis/nsis- 2 . 36 -setup.exe nsis- 2 . 36 -setup.exe \
	 
	ExecWait nsis- 2 . 36 -setup.exe
SectionEnd


...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35234524
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, инсталлятор, который грузит NSIS последней (от 29 марта) версии.
Плюс исходник.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35238031
Фотография ReNoiZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохой GUI к NSIS, с исходниками http://hmne.sourceforge.net/
Только что-то давно не обновлялся...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35238482
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReNoiZerНеплохой GUI к NSIS, с исходниками http://hmne.sourceforge.net/
Только что-то давно не обновлялся...
IMHO, слишком уж старый.
Если по каким-то причинам религия запрещает Venus , то Notepad++ . Он отлично работает с NSIS - скриптом (в т.ч. фолдинг, подсветка, автоподстановка и проч.) /* А еще он неплохо понимает и Inno - script */

Очень удобен SciTe (как и упомянутый выше hmne , он позволяет работать с проектами .)

А уж как приятно работать с NSIS проектами ч/з PsPad ... (отмечу, что для Inno он подходит ничуть не меньше).

Так что выбор есть.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35249941
Single Feniks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П о моему эти оба инсталлятора весьма хороши! Пользуюсь обоими! У них у каждого есть свои плюсы и минусы. Новичкам посоветовал бы начать с NSIS, в inno закопаетесь с тоннами кода для простеньких функций.

И зучил Inno токлько потому что там можно полностью изменять вид окна установочника, да м иузыку можно вставлять в mp3. А вот БГраунд картинками чтобы нормально сделать приходется комбинировать BMP и Jpg. Это наверно самая не продуманная часть inno т.к. реализуется через... вообщем вы поняли. Еще этот обязательно мелькающий синий фон окна с картинкой на заднем плане... Но зато есть возможность сделать изменение картинок по времени и прогрессу установки в %! =) Но нельзя как в NSIS вставить ее после извлечения определенного файла или групп не добавив еще пол тонны кода.

З .Ы.: Для NSIS есть неплохой форум: http://nsis.narod.ru/forum/ . Там уже расписаны основные функции и приемы в основном применяемые. Мои посты тож есть). Для Inno пользуюсь только поиском по инету... на их форуме можно закопаться с ушами!
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35250975
!пепелатц
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextManТак что выбор есть.
Конечно есть. Far Manager, Internal Editor ;)

И на кой хрен там впились специализированные редакторы? Вся прелесть NSIS в том, что это правильный скриптовый тулз, который не способствует разжижению мозга в неравной борьбе с оконцами (вроде Install Shield... Express).



А ещё есть vi. Он хоть и имеет всего два режима (бибикает и все портит), но всяк забавный зверек, если копнуть чуть поглубже. Вроде альтернативных впечатлений (ну там, секса с тремя таиланками, прыжки банги и т.д.).
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35463685
Заранее извиняюсь если кого-то обижу, но тут много раз повторяли - то одно NSIS не может, то другое, то у них что-то не получается и в итоге Inno рулит. Года три сижу на NSIS и с полной уверенностью, подтверждённой практикой, могу сказать что он умеет абсолютно всё и является лучшим из всех существующих инсталляторов. Вывод о кривизне своих ручек каждый делает сам.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35464272
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проходил мимо и ляпнул... Года три сижу на NSIS и с полной уверенностью, подтверждённой практикой, могу сказать что он умеет абсолютно всё
Да.
Мое самое последнее ИМХО: используем NSIS.

Проходил мимо и ляпнул...и является лучшим из всех существующих инсталляторов...
Ну, все существующие инсталляторы мы не видели...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35466624
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan
Так вот, без явного задания этих ключей silent режим не-воз-мо-жен.
Dmitry ArefievДумаю, не один инсталлер не сможет.
Возможен!, в инно silent режим можно сделать без ключей.
Проходил мимо и ляпнулГода три сижу на NSIS и с полной уверенностью, подтверждённой практикой, могу сказать что он умеет абсолютно всё
Он много не умеет того что умеет инно.
Как по мне НСИС хорош тем что у него маленький инсталляционный модуль и возможность вешать на деинсталлятор иконку.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35466625
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорят, самый модний инсталятор, это когда запускаеш прогу, а она сама рищыт поставлено ли все для нее, а чего нет то сама доставляет, таким образом можно полностью отказаться от инсталяторов, я так поступил и покамись не жалею)

--
мой скромный сайт http://mmm.ho.com.ua
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35466752
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MMM_CorpГоворят, самый модний инсталятор, это когда запускаеш прогу, а она сама рищыт поставлено ли все для нее, а чего нет то сама доставляет, таким образом можно полностью отказаться от инсталяторов, я так поступил и покамись не жалею)
И откуда она берёт файлы которые "сама доставляет"?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35466793
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtech MMM_CorpГоворят, самый модний инсталятор, это когда запускаеш прогу, а она сама рищыт поставлено ли все для нее, а чего нет то сама доставляет, таким образом можно полностью отказаться от инсталяторов, я так поступил и покамись не жалею)
И откуда она берёт файлы которые "сама доставляет"?

Как не крути, а минимум что надо, это скопировать и запустить инсталятор, тогда какая разница? Что копировать и запускать странный инсталятор или прогу, которая проверит все компоненты, а потом чего не будет хватать доставит, конечно файлы с ничего не висосет, ну а кто сказал что нельзя их тоже таскать гдето рядом с прогой?)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35466840
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а удалять ее потом как? а виста коли ее как инсталлятор не распознает, и позасовывает файлы не туда куда ты хотел, а в виртуальные папки?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467265
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaа удалять ее потом как? а виста коли ее как инсталлятор не распознает, и позасовывает файлы не туда куда ты хотел, а в виртуальные папки?

В инете полно примеров как удалять самого себя, про виртуальные папки впервые слишу...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467326
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, давайте каждый придумает себе программу, которая будет выглядеть как инсталлятор, выполнять все функции инсталлятора, но называть ее инсталлятором ни-ни :)

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

Но включать в основной код кучу объемных функций, которые будут выполняться 2 раза в жизни программы, имхо, непрофессионально.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467362
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMM_Corp chpashaа удалять ее потом как? а виста коли ее как инсталлятор не распознает, и позасовывает файлы не туда куда ты хотел, а в виртуальные папки?
В инете полно примеров как удалять самого себя
как пользователь будет твою программу удалять? рыскать в program files? или ты в ней самой реализуешь механизм прописывания в реестре и занесения себя родимой в список uninstall? (и какой в этом тогда смысл, продублировать то, что делают инсталляторы? легче самому код накатать чем разобраться с существующим?)

MMM_Corp
про виртуальные папки впервые слишу...
я вот почему-то так сразу и подумал. ну почитай, что такое виртуализация в Виста и куда попадут твои файлы (которые как ты думаешь будут писаться в Program Files) из-за того, что виста научена узнавать строго ограниченное число инсталляторов, и твоя программа в этот список не входит.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467527
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtech...
Он много не умеет того что умеет инно.

Примерчик будет?

Avtech...Как по мне НСИС хорош тем что у него маленький инсталляционный модуль и возможность вешать на деинсталлятор иконку.
Дас ист фантастиш...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467563
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan
К примеру изменение размеров и положение формы в любой угол экрана когда идёт показ слайд-шоу или видеоролика, для этого нужно использовать плагины (если они есть) или же править ресурсы, а также создание CustomForm. Может я и ошибаюсь но этого нигде не нашёл.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467672
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtech
К примеру изменение размеров и положение формы в любой угол экрана когда идёт показ слайд-шоу или видеоролика, для этого нужно использовать плагины (если они есть) или же править ресурсы, а также создание CustomForm. Может я и ошибаюсь но этого нигде не нашёл.
1. Есть встроенная функция SendMessage (зачем плагины или править ресурсы).
2. Ну вот люди делали свои диалоги. А вам то чего не хватало в стандартных?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467695
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqllex
2. Ну вот люди делали свои диалоги. А вам то чего не хватало в стандартных?
Эти диалоги в инно встроены, я имел ввиду формы которые можно по-своему строить и обрабатывать разные события через код.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35467838
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvtechЭти диалоги в инно встроены
Вообще то они берутся из самодельной DLL.
Avtechя имел ввиду формы которые можно по-своему строить и обрабатывать разные события через код.
Например, для чего?

Если так необходима необычная и мощная функциональность, делайте DLL и используйте все, что в нее напихали.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469081
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqllex
Например, для чего?
Если так необходима необычная и мощная функциональность, делайте DLL и используйте все, что в нее напихали.
Я не проверял но эта DLL использует системные диалоги, в инно они есть и без DLL.
sqllex
Если так необходима необычная и мощная функциональность, делайте DLL и используйте все, что в нее напихали.
Наверно проще форму в скрипте написать чем сделать DLL.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469175
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спорят... такие... а ведь они одинаковые )
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469381
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvtechНаверно проще форму в скрипте написать чем сделать DLL.
Слив засчитан.
Начинали с невозможности, закончили удобством. А примера так и не привели.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469683
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqllexНачинали с невозможности, закончили удобством. А примера так и не привели.Тоесть чтобы удовлетворить все возможности в нсис то нужно подключить кучу библиотек, количество и размер которых вполне может превысить саму устанавливаемую программу. А вы не задумывались почему для нсис существует так много библиотек?
Меня когда-то заинтересовал инсталятор Light Alloy где на странице выбора установки было несколько чекбоксов для создания ярлыков, а именно заинтересовала возможность создания контролов на стандартных страницах штатными средствами, но когда скачал скрипт Light Alloy то слегка огорчился тем что этого нельзя сделать не вмешиваясь в ресурсы программы. По поводу примеров смотрите в пакпе Examples в каталоге инно.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469871
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtech...Тоесть чтобы удовлетворить все возможности в нсис то нужно подключить кучу библиотек
Dll можно использовать.
В большинстве случаев достаточно использоватль встроенный язык. В т.ч. и в описанных вами случаях.

В Inno же встроенного Pascal недостаточно из-за его ограничений. Примеры - читаем тему с начала.
Avtech...количество и размер которых вполне может превысить саму устанавливаемую программу.
а) Привидите пример.
б) Ну и что, даже если это так?
в) Размер дистрибутива меня мало волнует
г) Вроде бы у NSIS размер дистрибутива обычно меньше? :)
Avtech...А вы не задумывались почему для нсис существует так много библиотек?
Популярность.
Avtech...По поводу примеров смотрите в пакпе Examples в каталоге инно.
Пустые слова.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469904
InnoCompiler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Inno Setup рулит
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469905
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу custom forms не знаю, как можно было не найти.

NSIS Users maual, 1.3 Features list.
А уже идущие в поставке, "неотъемлимые" палагины?

2.6 Plug-insThe NSIS distribution already included many plug-ins. InstallOptions is a popular plug-in that allows you to create custom pages , in combination with the NSIS Page commands (See Pages).

А макросы Modern UI?
...

А еще - дизайнеры форм, например:

Startup GUI


Generated Sample Code


Embedded StringList-Editor


Runtime-Mode


Preferences-Dialog

...
Это отсюда.
...
По поводу перемещения окна инсталлятора.
...

Avtech...<пурга>...
Гонишь по всем пунктам, короче. Ничего ты не искал и help не читал.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469992
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextManВ Inno же встроенного Pascal недостаточно из-за его ограничений. Примеры - читаем тему с начала.
Например?
По поводу API (с этим у меня пока слабовато) я не думаю что проблема в инно.
По поводу скинов то они в инно тоже есть:
1) Поддерживается NSIS_SkinCrafter_Plugin.dll но в нём много багов так как не расчитан для инно.
2) Поддерживается http://isskin.codejock.com/ в нём используются как стандартные темы (.cjstyles) так и темы оформления винды (.msstyles).
3) Corona Skin]http://victor-dobrov.narod.ru/InnoSetup_CoronaSkin_and_SystemTest.7z от Виктора Доброва , в нём помимо скина реализовано много интересных идей.
4) Через секцию [Code] можно самому скины рисовать.

NextManПопулярность.Скорей для того чтобы не исчезла эта "Популярность".

NextManПо поводу custom forms не знаю, как можно было не найти.
Я знаю про дизайнеры форм с помощью которых содаются CustomPage, я говорил про формы а не страницы.

NextManГонишь по всем пунктам, короче. Ничего ты не искал и help не читал.
Пустые слова.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35469997
Avtech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, запутался с тегами.
isskin.dll
Corona Skin
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35566175
Sh1td0wn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно делать инсталлер чтоб на несколько дисков?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35567900
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В NSIS вроде бы ограничение на объем инсталлера == 2Гб.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568199
xelaok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хехе, я в NSIS баг нашел. Переменная $DOCUMENTS под Вистой возвращает пустое значение когда папка с документами перемещена в корневой каталог на отдельный раздел...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568566
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh1td0wnа можно делать инсталлер чтоб на несколько дисков?
NSIS не умеет, Inno - умеет.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568649
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan Sh1td0wnа можно делать инсталлер чтоб на несколько дисков?
NSIS не умеет, Inno - умеет.
В NSIS для этого есть CABSetup plug-in.

И это правильно, имхо. В наше время редко нужен этот функционал.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568673
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, кто - нибудь знает, как рантайме менять/запрещать опцию запуска приложения на финишной стричке (MUI2)?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568678
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, для того, чтобы изменить параметры запуска, нужно в качестве параметров соотв. макросов (MUI_FINISHPAGE_RUN/MUI_FINISHPAGE_RUN_TEXT) использовать не константы, а переменные.

Ну и определить перед страничкой функцию FinishPageShow:

!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow

в которой менять значением переменных.

А вот как дизейблить запуск?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35568686
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот как дизейблить запуск?
Вот чё нарыл: в той же функции настройки странички меняем чек-бокс на "анчекед", и вообще дизейблим чекбокс.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function FinishPageShow
  ...
  ${if} <Надо дизейблить запуск>
    SendMessage $mui.FinishPage.Run ${BM_SETCHECK} ${BST_CHECKED}  0  #анчекед
    ShowWindow $mui.FinishPage.Run SW_HIDE # Прячем чекбокс
  ${endif}
FunctionEnd
В mui.FinishPage.Run - это как раз дескриптор того самого чекбокса, который создается при наличии MUI_FINISHPAGE_RUN:
Код: plaintext
1.
2.
3.
4.
5.
      ;Checkboxes
        !ifdef MUI_FINISHPAGE_RUN
          ${NSD_CreateCheckbox} 120u ${MUI_FINISHPAGE_RUN_TOP}u 195u 10u "${MUI_FINISHPAGE_RUN_TEXT}"
          Pop $mui.FinishPage.Run
...
 
(модуль Finish.nsi)

Прикольно, теперь к контралам можно по-людски, по именам переменных обращаться... :)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35579183
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, а кто как строит деинсталлятор?
Ну, предствьте себе, что долбаные юзеры первый раз запустили инсталлятор, инсталлировали два компонента (секции) из шести, потом снова запустили, и инсталлировали еще два других, но установили в другую папку установки, потом запустили еще раз полную инсталляцию, но в ту же папку, куда была выполнена первая инсталляция...
Потом несколько раз инсталлировали патчики, которые подменяли нужные файлы и т.п....
Ну, а потом запустили деинсталлятор. Который должен весь этот бред вычистить, кроме элементов, помеченных как "не деинсталлировать никогда"...
Как делаем?
...
...
Ну, вот я за основу взял http://nsis.sourceforge.net/Talk:Uninstall_only_installed_files - но такая мутотень вышла, атас полный:
Типа, при первой инсталляции в реестре фиксируется место, куда пишем денсталляционный лог, а потом его только дополняем. Но не так, как в ссылке (там просто дописываем), а типа .INI - файла, в котором добавляются несуществующие ключи и модифицируются их значения (напр., признак "не деинсталлировать" и т.п.). Потом деинсталлер парсит этот .ini, и выполняет деинст - операции...
Муторно, но работает вроде бы...
Ну вот, лог - файл получается в худшем случае двадцать - тридцать килобайт весом (т.е. небольшой), в связи с чем подумал: а не хранить ли все деинсталляционные логи просто в ветке реестра?

Народ, поделитесь соображениями/опытом, пжалста... :)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35579186
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, правильная ссылка вот: http://nsis.sourceforge.net/Uninstall_only_installed_files
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35579325
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan
Ну вот, лог - файл получается в худшем случае двадцать - тридцать килобайт весом (т.е. небольшой), в связи с чем подумал: а не хранить ли все деинсталляционные логи просто в ветке реестра?
Вот чего бы не делал, так именно этого. Пусть лог хранится там, куда инсталится ПО. Его оттуда замечательно можно достать и процедура установки обновление|новая очень понятна и прозрачна. Директория установки является естественным разделителем ветки в алгоритме установки.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35579335
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllex NextMan
Ну вот, лог - файл получается в худшем случае двадцать - тридцать килобайт весом (т.е. небольшой), в связи с чем подумал: а не хранить ли все деинсталляционные логи просто в ветке реестра?
Вот чего бы не делал, так именно этого. Пусть лог хранится там, куда инсталится ПО. Его оттуда замечательно можно достать и процедура установки обновление|новая очень понятна и прозрачна. Директория установки является естественным разделителем ветки в алгоритме установки.
Ну, так все и есть сейчас.
...
А почему - "не делал бы"? Реестр Windows есть священная корова? Или другие соображения?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35580187
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan
А почему - "не делал бы"? Реестр Windows есть священная корова? Или другие соображения?
В реестр лазят другие прграммы, которые могут его "удачно" почистить. Плюс восстановление системы.
Через "ини" (как отдельный файл) проще отладка и последующее сопровождение.
ИМХО.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35586963
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, незадачка... :(
Некоторые файлы содержат по два идущих подряд символа $: 'File$$.EXP'
Команда NSIS "File" позволяет использоваать такие имена, а при попытке записать их в ini - файл два $$ схлопываются в один, в соотв. с правилами представления строк.
Т.е., к примеру:
Код: plaintext
1.
2.
3.
 StrCpy $ 0  "C:\'File$$.EXP'"
 File $ 0  # все гут.
 WriteINIStr "MyFile.ini", "MySection", $ 0 , "Тра-ля-ля" # Создается ключ с именем "C:\'File$.EXP'"

Рррр! & ?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35588476
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllex NextMan
А почему - "не делал бы"? Реестр Windows есть священная корова? Или другие соображения?
В реестр лазят другие прграммы, которые могут его "удачно" почистить. Плюс восстановление системы.
Через "ини" (как отдельный файл) проще отладка и последующее сопровождение.
ИМХО.
Это-то да...
Но вот сегодня размер секции превысил допустимый размер буфер для фукнции GetPrivateProfileSection (32767 байт)... И песец.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35588922
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan
Это-то да...
Но вот сегодня размер секции превысил допустимый размер буфер для фукнции GetPrivateProfileSection (32767 байт)... И песец.
Ну так GetPrivateProfileSection - 16-битная WinAPI функция.

А чего же ты умыдрился напихать туда, что в 32к не поместилось?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35589063
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Список файлов для последующей денсталляции...
Причем, если в WinNT писать ini файлы можно любого размера (читать, естественно, "ручками" - см. выше), то в Win9x больше 64к файлики и не создаются...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35589305
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManСписок файлов для последующей денсталляции...
Полные пути? Заменить на относительные.
Маски нельзя использовать?
А какое кол-во файлов в одной секции и что собой представляет название секции?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35590105
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. sqllex NextManСписок файлов для последующей денсталляции...
Полные пути? Заменить на относительные.
Маски нельзя использовать?

Полумеры.
2. sqllex
А какое кол-во файлов в одной секции и что собой представляет название секции?
Разное количество, большое или маленькое, в зависимости от пожеланий заказчика.
Название секции - слово. "Files", "ComServers", "Directories" и т.д.

3. Переделано на использование реестра. Полет нормальный.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35590237
Inno Setup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NSIS говно, высранное каким-то недоноском, помешанном на ссах и ссах с крестами. это чмо ниасилило нормальный скриптовый язык? за один стековый язык этот котях должен быть выброшен в биореактор. это поделие под висту может инсталяты нормальные делать, а? InnoSetup может, а эта хуета нет. Так что тут нечего и думать, однозначно Inno лучше.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35590247
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупыш, все там есть - и структурный язык (правда, в виде расширения - см. Logiclib), и поддержка Vista.
В обоих присутствует наличие отсутствия легко настраивать интерфейс пользователя "на лету", но в MUI2 и это стало простым делом.
Ну, еще Inno попроще дельфятнику освоить.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35590261
nelson mandella
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Советовать категорично что-то тут не получится. У каждого свой взгляд на удобство инсталлера.
Дельфятнику Inno точно лучше. Особенно хорош для дистрибутивов своих компонентов, когда нужно на лету инсталлить их, предварительно собрав пакеты.
Также, как ни странно, Inno лично мне неплохо подошел и для C#-проектов. Наличие готовых скриптов, например, закачивающих Framework из Интернет, а также готовых проектов для дистрибуции компонентов - несомненный плюс Inno. А так - на вкус на цвет...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35590867
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nelson mandellaОсобенно хорош для дистрибутивов своих компонентов, когда нужно на лету инсталлить их, предварительно собрав пакеты.
Также, как ни странно, Inno лично мне неплохо подошел и для C#-проектов. Наличие готовых скриптов, например, закачивающих Framework из Интернет, а также готовых проектов для дистрибуции компонентов
Т.е. эти 2 действия у тебя не получилось сделать с помощью NSIS? А в чем проблемы то были?
Detect and download the .NET framework
Installing the Microsoft .NET Framework
How to Automatically download and install a particular version of .NET if it is not already installed
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35602356
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, кто-нибудь знает, как внутри секции определить, что это за секция? :)

Задача в том, что есть некоторый универсальный макрос, который делает разные вещи в зависимости от того, в какой секции он находится.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35602735
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...пошлым образом завел переменную, которую инициализирую в начале каждой секции ее индексом... :(
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35603096
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня сын из пачки с "несквиком" достал компакт-диск с игрой.
Ну, приз, типа.


Так вот, там прикольный инсталлятор: небольшой Setup.exe и .jar - архив на 500 мегабайт.
Первый создает "на лету" jre, и раскручивает второй.

А во втором - что хочешь, с любой логикой (ява, типа)... :)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35603834
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManНарод, кто-нибудь знает, как внутри секции определить, что это за секция? :)

Задача в том, что есть некоторый универсальный макрос, который делает разные вещи в зависимости от того, в какой секции он находится.
Параметр section_index_output ?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35604787
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllexNextManНарод, кто-нибудь знает, как внутри секции определить, что это за секция? :)

Задача в том, что есть некоторый универсальный макрос, который делает разные вещи в зависимости от того, в какой секции он находится.
Параметр section_index_output ?

Хм. "А я что спросил?" -(c)

Код: plaintext
1.
2.
3.
Section

[/o] [([!]|[-])section_name] [section_index_output]

Т.е., например, для такого объявления:

Код: plaintext
1.
2.
3.
4.
Section "Первая секция" var_index

; Как здесь узнать значение, заданное параметру var_index?

SectionEnd
Дело в том, что это не переменная (Var), а определение. Т.е., аналог будет
!define var_index 0

Для другой секции придется использовать другое имя для section_index_output, иначе получим отлуп в виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Section "Первая секция" var_index
...
SectionEnd

Section "Вторая секция" var_index
; Здесь ошибка:
; Error: "var_index" already defined, can't assign section index!

SectionEnd

Вот так вот.
:(
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605048
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan
Т.е., например, для такого объявления:

Код: plaintext
1.
2.
3.
4.
Section "Первая секция" var_index

; Как здесь узнать значение, заданное параметру var_index?

SectionEnd

Может быть я чего-то не понимаю, но
Код: plaintext
1.
2.
Section "Первая секция" var_index
MessageBox MB_OK "${var_index}"
SectionEnd

Если нужна функция, в которой нужно обработать значение по имени var_index , то ее тело должно быть ниже по тексту скрипта.
Либо передавай значение var_index в функцию перед вызовом через стек.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605446
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllex
Либо передавай значение var_index в функцию перед вызовом через стек.
Ну привет...
Весь вопрос и состоит в том, чтобы узнать, чему равен индекс. Если я буду знать, что передать, то мне и функция не нужна.


Смотри:
Определяем макрос без параметров :

Код: plaintext
1.
2.
3.
4.
5.
!macro MyMacro
  ...
  ...
  ...
!macroend

Далее, берем ЛЮБУЮ секцию, вставляем в нее этот макрос:

Код: plaintext
1.
2.
3.
4.
5.
Section "Любая секция" sect_index
...
  !insertmacro MyMacro
...
SectionEnd

Задача состоит в том, чтобы макрос напечатал либо имя секции "Любая секция", либо значение ее индекса sect_index.
Андырстэнд?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605526
GoodMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А из хелпа пример не пойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Section test2 sec2_id
SectionEnd

 Function  .onInit
  SectionGetText $ {sec2_id}  $ 0 
  MessageBox MB_OK "name  of  $ {sec2_id} :$\n$ 0 " # will correctly display 'name of 1: test2'
FunctionEnd
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605532
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoodMind,

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


Ну как бы так еще сказать... Короче - нужен аналог "this" контекста текущей секции.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605537
GoodMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так используй глобальную переменную
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605556
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и использую.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35605559
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoodMindНу так используй глобальную переменную
Индекс секции - это и так глобальная переменная.

NextMan, а можно привести текст макроса. Я, хоть убей, не могу понять, что же тебе нужно. В каком контексте ты используешь индекс секции?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35954692
Бобик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, вы здесь все специалисты. Быть может подскажете в чем может быть проблема с NSIS. Конкретно интересует конструкция:

!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP

Из хелпа:

For the uninstaller, use the MUI_STARTMENU_GETFOLDER macro to get the Start Menu folder:

!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk"


Проблема в том, что MUI_STARTMENU_GETFOLDER не присваивает $ICONS_GROUP изменного значения STARTMENU.

От сеюя хочется добавить, что весьма сложно разбраться с NSIS. Даже нет толкового описания синтаксиса. Приходится каждую буковку выковыривать.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #35954804
Бобик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan интересные вещи говорил, полезно почитать его посты.

А насчет проблемы с !insertmacro MUI_STARTMENU_GETFOLDER пришлось сырцы глянуть. Оказывается в

!insertmacro MUI_PAGE_STARTMENU Application $Переменная_измененной_группы

нужно не только устанавливать

MUI_STARTMENUPAGE_REGISTRY_ROOT
MUI_STARTMENUPAGE_REGISTRY_KEY
MUI_STARTMENUPAGE_REGISTRY_VALUENAME

для сохранения в реестре изменнной STARTMENU группы($Переменная_измененной_группы), но также еще и дополнительно прописывать ID к чему это все хозяйство относится:

!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
!insertmacro MUI_STARTMENU_WRITE_END

и лишь затем получать группу (например в Unstaller):

!insertmacro MUI_STARTMENU_GETFOLDER Application $Переменная_измененной_группы

Примеры NSIS слабенькие, многие просто не доведены до конца: тот же StartMenu (NSIS\Examples\StartMenu\) - группу создают, но не удаляют. В чем и есть весь прикол, т.к. тема MUI_STARTMENU_GETFOLDER мягко обойдена вниманием - типа е..тесь как хотите сами ;)

Вопросов масса. Например, как в background window (BGFont, BGGradient) сделать разбиение текста на две и более строки.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #36325788
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бобик2...
Примеры NSIS слабенькие, многие просто не доведены до конца: тот же StartMenu (NSIS\Examples\StartMenu\) - группу создают, но не удаляют.
... Удаляем обычными операциями с файлами/директориями.
...
Имхо, в примерах мало внимания уделено процессу деинсталляции.
В Инно это как бы все "само собой", а здесь - ты должен понимать, что делаешь. И, соответственно, проектировать инсталляцию с учетом будущей деинсталляции.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #36326588
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  StrCpy $ 1  "абвгд"


  $ {IfNot}  $ 1  <> ""
# Фиквам
  $ {EndIf} 


  $ {IfNot}  $ 1  == ""
# Теперь да
  $ {EndIf} 
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #36327582
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пипец...вот написал так написал...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #36452200
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManНарод, кто-нибудь знает, как внутри секции определить, что это за секция? :)

Задача в том, что есть некоторый универсальный макрос, который делает разные вещи в зависимости от того, в какой секции он находится.
${__SECTION__}

${__SECTION__}Defined as the section name, without any prefixes, in section scope.
Аналогично:


${__FUNCTION__}Defined as the function name, without any prefixes, in function scope.
${__PAGEEX__}Defined as the page type in PageEx scope.
${__UNINSTALL__}Defined in section, function or PageEx scopes of the uninstaller.

Источник: NSIS user manual, chapter 5.2 "Predefines".
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #36452225
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, кому понадобится.

Если нужна условная компиляция в зависимости от разных внешних условий (наличе/отсутствие файла, например), то используем директиву !system.
Вещь очевидная, описана в примерах, но я не знал :(.

Пример.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
### If nsx.dll not found then "Search with banner" example will not be compile ###
; Создается временный файл - пустышка
!system 'ECHO.>"%TEMP%\Temp$$$.nsh"'
; Если файл nxs.dll  существует, во временный файл дописывается директива !define nxs_exist
!system 'IF EXIST "${NSISDIR}\Plugins\nxs.dll" ECHO !define nxs_exist>>"%TEMP%\Temp$$$.nsh"'
; временный файл включается в текущий скрипт
!include "$%TEMP%\Temp$$$.nsh"
; временный файл удаляется
!system 'DEL "%TEMP%\Temp$$$.nsh"'

!ifdef nxs_exist
; Понеслась...
Section /o "Search with banner - 'NxS' plugin required" SearchWithBanner
...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
NSIS или Inno Setup?
    #38306858
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Под Windows 8 появилась проблемка: инсталлятор, приготовленный с помощью NSIS, инсталлирует ХЗ как.
Если перед запуском указать файлу инсталлятора режим совместимости Windows 7 - то все ОК.

Версия NSIS - 2.46 (последний доступный релиз).

Как бы и что поправить?

Спасибо.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306880
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, третью версию недавно выпустили:

авторAdded support for Windows 8 and Windows Server 2012

Гут.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306888
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДАга, третью версию недавно выпустили:

авторAdded support for Windows 8 and Windows Server 2012

Гут.
Нихт гут, зер шлехт. :(

"Тройка" - пока первая падучая "альфа". А 2.хх, похоже, заморозили.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306891
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДВсем привет.

Под Windows 8 появилась проблемка: инсталлятор, приготовленный с помощью NSIS, инсталлирует ХЗ как.
Если перед запуском указать файлу инсталлятора режим совместимости Windows 7 - то все ОК.

Версия NSIS - 2.46 (последний доступный релиз).

Как бы и что поправить?

Спасибо.
Вот тут один дяденька пишет, что в манифест приложения генерируемого инсталлятора нужно добавить запись о совместимости с Windows 8:

Код: xml
1.
             <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />


только делает это он через анус с помощью утилиты mt.exe из состава MS Visual Studio.
Проверил: работает, но требует установленного дотнета соответствующей версии.
Блин. Оставлю этот вариант "на сладкое", если ничего не придумаю.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306893
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёпть, ну я и идиот. NSIS же опен-соурсе. Вкомпиляй в ресурсы какие хочешь манифесты, на здоровье!

~~~~~~

ЛЮ-У-У-У-ДИ! Кто-нибудь самостоятельно, из исходников собирал NSIS?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306903
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДЁпть, ну я и идиот. NSIS же опен-соурсе. Вкомпиляй в ресурсы какие хочешь манифесты, на здоровье!

~~~~~~

ЛЮ-У-У-У-ДИ! Кто-нибудь самостоятельно, из исходников собирал NSIS?
Так, продолжаем тормозить...

В SVN лежат исходники, в которых все сделано: http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/trunk/

Осталось найти способ все это "щасте" откомпилять или найти откомпиленную версию. Последний найтбилд делался сто лет назад.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306912
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БлѢ ... Building NSIS хоть с сипипишникам на поклон иди...

Нужно поставить:
- python версии 2.* (не ниже 2.4).
- SCons - версии не ниже 1.2.0.
- zlib - dt
- wxWidgets

Потом откомпилять все это с помощью C++ из состава VS 2005 Express Editions.

Питон: Качаем версию 2.7 , ставим.

SCons: http://www.scons.org/ Качаем версию 2.3.0, ставим. Не ставится. Не видит место, где инсталлировался питон. Выбор руками задизейблен...блин.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306914
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нсис умер, инно живет и местами процветает. Я им пользуюсь и все рады. Особенно корпоративнве клиенты.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306929
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДБлѢ ... Building NSIS хоть с сипипишникам на поклон иди...

Нужно поставить:
- python версии 2.* (не ниже 2.4).
- SCons - версии не ниже 1.2.0.
- zlib
- wxWidgets

Потом откомпилять все это с помощью C++ из состава VS 2005 Express Editions.

Питон: Качаем версию 2.7 , ставим.

SCons: http://www.scons.org/ Качаем версию 2.3.0, ставим. Не ставится. Не видит место, где инсталлировался питон. Выбор руками задизейблен...блин.
Угу. Нефиг умничать: не работало из-за того, что питон был установлен 64 - разрядный.
Снес, поставил 32-разрядный, SCons установился.

Качаем zlib: http://zlib.net/ Выбираем zlib128-dll.zip, качаем, распаковываем. создаем системную переменную ZLIB_W32, в которую прописываем путь к распакованной библиотеке zlib.

Качаем wxWidgets: http://www.wxwidgets.org/ - берем версию 2.8.4 (есть поновее, но как бы не вышло типа наподобие как с питоном). Инсталлируем. Создаем системную переменную WXWIN, в которую прописываем путь в директорию инсталляции.

Теперь надо весь этот хлам откомпилять.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306931
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanНсис умер...
С чего бы это? 20 мая третья версия вышла.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306933
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД20 мая третья версия вышла.
Естественное газообразование не есть развитие. :)
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306937
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...

Теперь надо весь этот хлам откомпилять.

Качаем, ставим Visual C++ 2005 Express Edition.

В конце инсталляции (под Win 7 x64 Pro) появляется окошко о "неправильной" инсталляци... лезем в инет за спавкой...угу, несовместимы.

Хотя некоторые товарищи утверждают, что если снять суровые правила доступа к папке инсталляции студии, все работает. Что и делаем. Тестовое С++ приложение строится без проблем.

Продолжаем.

Run->Cmd:

...идем в папку исходников trunk, компилируем меню для NSIS:

cd D:\bNSIS\trunk\Contrib\NSIS Menu\wx
wxbuild.bat
...

...фиквам: не найден файл windows.h. Точно, не найден. Нет его. Фига себе Visual C++.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306939
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...
...фиквам: не найден файл windows.h. Точно, не найден. Нет его. Фига себе Visual C++.
Ну да, все правильно: в MS VS экспресс эдишн не входит Platform SDK.

Что-то меня это достало. Попробую поставить пиратку триалку MS VS 2005 90-дневню, в которой все в одном флаконе.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306958
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...Попробую поставить пиратку триалку MS VS 2005 90-дневню, в которой все в одном флаконе.
Ой-ей... версия, которая trunk, и есть та самая глючная альфа. :(

Пожалуй, проще скачать исходники текущей 2.46 http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/tags/v246/?view=tar
- и подправить в них файл, генерирующий манифест инсталлятора.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306959
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...скачать исходники текущей 2.46 http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/tags/v246/?view=tar
- и подправить в них файл, генерирующий манифест инсталлятора.

Файл manifest.cpp, исправляем строчку №60, теперь она будет выглядеть так:

Код: plaintext
1.
        xml += "<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"><application><supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/><supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/><supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"/></application></compatibility>";



Т.е., добавлен GUID - идентификатор для Win 8:
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
...
Попью кофе. Не может быть, чтобы махровому дельфятнику какая-то фигня на сипипи не далась.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38306961
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Зараза. Scans слишком новой версии. Ставлю 1.2.0.
Зараза. Scans версии 1.2.0 без прав администратора не ставится. Даю права. Ставится.
Зараза. HTML Help Workshop в Win 7 недоступен. chm файлы не генерятся. Ставлю насильно: http://ru.originaldll.com/file/hhc.exe/19713.html
...
Зараза. Еще пришлось руками прописать в path пути к питоновским бинарникам и к его же папке Scripts.
...

Ура, типа. У меня теперь есть NSIS, генерирующий инсталляторы, совместимый с MS Win 98.. MS Win 8.

В очередь, сукины дети. Завтра потестирую.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307042
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,
вот я нагуглил что-то, кажется этим способом нужно только mt.exe (и NSIS)
http://www.level533.com/2012/12/add-windows-8-manifest-to-nsis-installer/
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307054
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62чччД,
вот я нагуглил что-то, кажется этим способом нужно только mt.exe (и NSIS)
http://www.level533.com/2012/12/add-windows-8-manifest-to-nsis-installer/
Я чуть выше писал об этом.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307055
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДs62чччД,
вот я нагуглил что-то, кажется этим способом нужно только mt.exe (и NSIS)
http://www.level533.com/2012/12/add-windows-8-manifest-to-nsis-installer/
Я чуть выше писал об этом.
14468415
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307139
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62, Нам чччД рассказывает про подводные камни и лоцию рисует.
А ты, не читая, им опробованную хрень предлагаешь!
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307207
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gators62, Нам чччД рассказывает про подводные камни и лоцию рисует.
А ты, не читая, им опробованную хрень предлагаешь!Ошибаешься, как раз не опробованную:
чччДБлин. Оставлю этот вариант "на сладкое", если ничего не придумаю.
Ты сам-то всё прочитал? )
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307208
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, все-таки опробованную:
чччДПроверил: работает, но требует установленного дотнета соответствующей версии.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307212
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62, мне не надь. Но будь уверен. Со вчерашнего вечера.
И не увидел смысла расшифровки раскрытия ТУТ из 14468415 .

Чужие мысли воруешь?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307215
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,
я написал чччД и он отреагировал спокойно. А тебя что-то клинит.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307221
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Gator,
я написал чччД и он отреагировал спокойно. А тебя что-то клинит. Дык я в отпуске, а у них он впереди. И продолжительность разная :)

Впрочем, может быть ты тот самый "дяденька" из тут?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #38307223
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В отпуске это хорошо.)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
NSIS или Inno Setup?
    #39319984
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу плагинов.

Тут ранее писали, что либо пользуемся встроенными средствами ("командами") NSIS, либо используем расширения - "плагины".

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

Обращаться к плагину следует так:

Имя_Dll:Имя_Метода [необязательные параметры]

Сейчас расскажу, как это делается.

Плагин - это dll, особым образом написанная. Вообщем, можно использовать не только самописные, но и "системные" - user32.dll, например. Но именно "плагины" использовать проще всего.

Плагин включается в тело дистрибутива при компиляции последнего, просто по факту обращения к плагину.
Компилятор NSIS ищет плагины в своей директории Plugins, дочерней по отношению к директории, откуда был запущенк компилятор NSIS.
Для того, чтобы указать дополнительную директорию поиска, нужно использовать команду времени компиляции !addplugindir:

!addplugindir ..\myplugin
MyPlugin::SomeFunction


Так как есть обращение к плагину MyPlugin, он будет включен в дистрибутив.
Обращение к плагину возможно только в рантайме, следовательно, код вызова
MyPlugin::SomeFunction
допустим только в секциях . Ну и во всяких там функциях, которые вызываются из секций.
...
В плагин можно передавать параметры. Кроме того, параметры можно занести в переменные NSIS ($0, $1, ...) и считать их в плагине.
Плагин, естественно, может установить значения переменных NSIS и таким образом вернуть результат. Доступны и так всеми "любимые" стековые операции.
В плагин можно передать функции NSIS. Я про те, которые:

Function func
;... бла-бла
FunctionEnd

Много чего можно.

Сейчас набросаю крошечный NSIS - проект с крошечным самописным плагином.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319985
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSIS-проект:

Test.nsi
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Name "Delphi plugin test"

OutFile "DelphiPluginTest.exe" 

ShowInstDetails show

; Будем использовать новомодный интерфейс  MUI2.nsh: 
!include MUI2.nsh

; Ага!
!addplugindir "."

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES


Section "Section One"
  MyPlugin::ShowLogText "Привет! Это секция 1!"
SectionEnd

Section "Section Two"
  MyPlugin::ShowDialog "Привет! Это секция 2!"
SectionEnd


Видим две секции, в первой - обращение к MyPlugin::ShowLogText, во второй - MyPlugin::ShowDialog.

ShowLogText и ShowDialog - это методы, реализованные в моем плагине.
Код проекта плагина:
MyPlugin.dpr
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
library MyPlugin;
uses
  SysUtils,
  Classes,
  Plugin_Impl in 'Plugin_Impl.pas',
  nsis in 'nsis.pas';
{$R *.res}
exports ShowLogText, ShowDialog;
begin
end.


Вроде все понятно и просто.
nsis.pas - это просто паскалевская обертка к api плагинов NSIS.
nsis.pas
{
Original Code from
(C) 2001 - Peter Windridge

Code in separate unit and some changes
2003 by Bernhard Mayer

Fixed and formatted by Brett Dever
http://editor.nfscheats.com/

simply include this unit in your plugin project and export
functions as needed
}

unit nsis;

interface

uses
windows, CommCtrl, SysUtils;

type
VarConstants = (
INST_0, // $0
INST_1, // $1
INST_2, // $2
INST_3, // $3
INST_4, // $4
INST_5, // $5
INST_6, // $6
INST_7, // $7
INST_8, // $8
INST_9, // $9
INST_R0, // $R0
INST_R1, // $R1
INST_R2, // $R2
INST_R3, // $R3
INST_R4, // $R4
INST_R5, // $R5
INST_R6, // $R6
INST_R7, // $R7
INST_R8, // $R8
INST_R9, // $R9
INST_CMDLINE, // $CMDLINE
INST_INSTDIR, // $INSTDIR
INST_OUTDIR, // $OUTDIR
INST_EXEDIR, // $EXEDIR
INST_LANG, // $LANGUAGE
__INST_LAST
);
TVariableList = INST_0..__INST_LAST;

type
PluginCallbackMessages = (
NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup
NSPIM_GUIUNLOAD // Called after .onGUIEnd
);
TNSPIM = NSPIM_UNLOAD..NSPIM_GUIUNLOAD;

//TPluginCallback = function (const NSPIM: Integer): Pointer; cdecl;

TExecuteCodeSegment = function (const funct_id: Integer; const parent: HWND): Integer; stdcall;
Tvalidate_filename = procedure (const filename: PChar); stdcall;
TRegisterPluginCallback = function (const DllInstance: HMODULE; const CallbackFunction: Pointer): Integer; stdcall;

pexec_flags_t = ^exec_flags_t;
exec_flags_t = record
autoclose: Integer;
all_user_var: Integer;
exec_error: Integer;
abort: Integer;
exec_reboot: Integer;
reboot_called: Integer;
XXX_cur_insttype: Integer;
plugin_api_version: Integer;
silent: Integer;
instdir_error: Integer;
rtl: Integer;
errlvl: Integer;
alter_reg_view: Integer;
status_update: Integer;
end;

pextrap_t = ^extrap_t;
extrap_t = record
exec_flags: Pointer; // exec_flags_t;
exec_code_segment: TExecuteCodeSegment; // TFarProc;
validate_filename: Pointer; // Tvalidate_filename;
RegisterPluginCallback: Pointer; //TRegisterPluginCallback;
end;

pstack_t = ^stack_t;
stack_t = record
next: pstack_t;
text: PChar;
end;

var
g_stringsize: integer;
g_stacktop: ^pstack_t;
g_variables: PChar;
g_hwndParent: HWND;
g_hwndList: HWND;
g_hwndLogList: HWND;
g_extraparameters: pextrap_t;

procedure Init(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer = nil);

function LogMessage(Msg : String): BOOL;
function Call(NSIS_func : String) : Integer;
function PopString(): string;
procedure PushString(const str: string='');
function GetUserVariable(const varnum: TVariableList): string;
procedure SetUserVariable(const varnum: TVariableList; const value: string);
procedure NSISDialog(const text, caption: string; const buttons: integer);

implementation

procedure Init(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer = nil);
begin
g_stringsize := string_size;
g_hwndParent := hwndParent;
g_stacktop := stacktop;
g_variables := variables;
g_hwndList := FindWindowEx(FindWindowEx(g_hwndParent, 0, '#32770', nil), 0,'SysListView32', nil);
g_extraparameters := extraparameters;
end;


function Call(NSIS_func : String) : Integer;
var
codeoffset: Integer; //The ID of nsis function
begin
Result := 0;
codeoffset := StrToIntDef(NSIS_func, 0);
if (codeoffset <> 0) and (g_extraparameters <> nil) then
begin
codeoffset := codeoffset - 1;
Result := g_extraparameters.exec_code_segment(codeoffset, g_hwndParent);
end;
end;

function LogMessage(Msg : String): BOOL;
var
ItemCount : Integer;
item: TLVItem;
begin
Result := FAlse;
if g_hwndList = 0 then exit;
FillChar( item, sizeof(item), 0 );
ItemCount := SendMessage(g_hwndList, LVM_GETITEMCOUNT, 0, 0);
item.iItem := ItemCount;
item.mask := LVIF_TEXT;
item.pszText := PChar(Msg);
ListView_InsertItem(g_hwndList, item);
ListView_EnsureVisible(g_hwndList, ItemCount, TRUE);
end;

function PopString(): string;
var
th: pstack_t;
begin
if integer(g_stacktop^) <> 0 then begin
th := g_stacktop^;
Result := PChar(@th.text);
g_stacktop^ := th.next;
GlobalFree(HGLOBAL(th));
end;
end;

procedure PushString(const str: string='');
var
th: pstack_t;
begin
if integer(g_stacktop) <> 0 then begin
th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + g_stringsize));
lstrcpyn(@th.text, PChar(str), g_stringsize);
th.next := g_stacktop^;
g_stacktop^ := th;
end;
end;

function GetUserVariable(const varnum: TVariableList): string;
begin
if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then
Result := g_variables + integer(varnum) * g_stringsize
else
Result := '';
end;

procedure SetUserVariable(const varnum: TVariableList; const value: string);
begin
if (value <> '') and (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then
lstrcpy(g_variables + integer(varnum) * g_stringsize, PChar(value))
end;

procedure NSISDialog(const text, caption: string; const buttons: integer);
var
hwndOwner: HWND;
begin
hwndOwner := g_hwndParent;
if not IsWindow(g_hwndParent) then hwndOwner := 0; // g_hwndParent is not valid in NSPIM_[GUI]UNLOAD
MessageBox(hwndOwner, PChar(text), PChar(caption), buttons);
end;

begin

end.


Реализация методов ShowLogText и ShowDialog:
Plugin_Impl.pas
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
unit Plugin_Impl;

interface
uses
  Windows;
procedure ShowLogText(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;
procedure ShowDialog(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;

implementation

uses
  nsis;

procedure ShowLogText(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;
var
  fStr: string;
begin
  Init(hwndParent, string_size, variables, stacktop);
  fStr := PopString();
  LogMessage(fStr)
end;

procedure ShowDialog(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;
var
  fStr: string;
begin
  Init(hwndParent, string_size, variables, stacktop);
  fStr := PopString();
  NSISDialog(fStr, 'MyPlugin::ShowDialog', MB_OK)
end;
end.




Пояснения.

Методы плагинов имеют сигнатуру:

Код: pascal
1.
procedure Имя_метода(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;



Первым делом следует скопировать параметры в глобальные структуры библиотеки, вызвав метод
Код: pascal
1.
  Init(hwndParent, string_size, variables, stacktop);



Все, дальше можно работать.
~~~~~~~~~
Параметры плагину передаются в виде строки, через NSIS - стек.
Соответственно, для доступа к параметрам используется функция работы со стеком PopString():
Код: pascal
1.
2.
3.
4.
5.
var
  fStr: string;
begin
...
  fStr := PopString();



"Лишний" вызов PopString() не сломает систему, просто вернет пустую строку (и ошибку в коде завершения, если кому интересно).
...
Для компиляции инсталлятора нужно запустить makensisw.exe и затем с помощью makensisw.exe открыть наш скрипт test.nsi.
Перед этим нужно откомпилировать dll (сам плагин).

Исходники проекта (и результаты компиляции) прилагаются:
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319986
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Построено с использованием NSIS 3.0 (но вполне работает и на v2.42) x32 бита, Delphi 2007.
...
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319990
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для доступа к переменным NSIS в плагине используем GetUserVariable():

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var
  fOutDir : string;
  fExeDir : string;
  fInstDir : string;

  fR0 : string; // $0
  f_0 : string; // $R0

begin
...
  fOutDir := GetUserVariable(INST_OUTDIR); // Выходная директория для команды File
  fExeDir := GetUserVariable(INST_EXEDIR); // Директория, из которой запущен инсталлятор
  fInstDir := GetUserVariable(INST_INSTDIR); // Директория инсталляции
...
  fR0 := GetUserVariable(INST_0); // $0
  f_0 := GetUserVariable(INST_R0); // $R0



Для установки нового значения переменной NSIS используем SetUserVariable():

Код: pascal
1.
SetUserVariable(INST_INSTDIR, 'C:\InstallDir');
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319991
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вызова NSIS функций из кода плагина сигнатура пользовательских методов должна быть чуть расширена:

Код: pascal
1.
2.
procedure Имя_Метода(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; 
  const extraparameters: pointer); cdecl;


То же самое касается метода Init:

Код: pascal
1.
  Init(hwndParent, string_size, variables, stacktop, extraparameters);



Благодаря тому, что методы NSIS - плагинов создаются с оглашением о связях типа cdecl , мы может использовать не все параметры, а только те, которые нужны: очисткой параметров занимается вызывающая сторона.

Передадим в плагин адрес NSIS функции через переменную NSIS $0 :

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Section "Fuction $0 section"

  MyPlugin::RegisterPluginCallback

  GetFunctionAddress $0 func
  MyPlugin::CallNSISFunc

SectionEnd

Function func
  DetailPrint "Привет из функции func!"
FunctionEnd



Вот сам метод
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure CallNSISFunc(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer); cdecl;
var
  fFuncAddr : String;
begin
  Init(hwndParent, string_size, variables, stacktop, extraparameters);

  fFuncAddr := GetUserVariable(INST_0);
  Call(fFuncAddr);
end;
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319993
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, можно назначить метод плагина, выполняющий специальные задачи: отслеживание выгрузки плагинов (по завершению приложения) и деинициализацию графической системы, после .onGUIEnd .
Для этого нужно зарегистрировать специальную функцию с сигнатурой

Код: pascal
1.
function имя_функции(const NSPIM: TNSPIM): Pointer; cdecl;



Тип параметров понятен из описания:
Код: pascal
1.
2.
3.
4.
5.
  PluginCallbackMessages = (
    NSPIM_UNLOAD,   // This is the last message a plugin gets, do final cleanup
    NSPIM_GUIUNLOAD // Called after .onGUIEnd
    );
  TNSPIM = NSPIM_UNLOAD..NSPIM_GUIUNLOAD;



В качестве наполнения такой функции будем показывать простые диалоги:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function MynSysCallBack(const NSPIM: TNSPIM): Pointer; cdecl;
begin
  Result := nil;
  if NSPIM = NSPIM_UNLOAD then
      NSISDialog(PChar('Выгрузка плагинов, последний коллбэк, гудбай!'), PChar('MynSysCallBack'), MB_OK)
  else  if NSPIM = NSPIM_GUIUNLOAD then
      NSISDialog(PChar('Деинициализация графики, ЧАО!'), PChar('MynSysCallBack'), MB_OK)
end;


... а вот так эта функция регистрируется (не забываем про extraparameters !):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure RegisterPluginCallback(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer); cdecl;
var
  ThisDllInstance : HMODULE;
begin
  Init(hwndParent, string_size, variables, stacktop, extraparameters);

  if g_extraparameters <> nil then
  begin
    ThisDllInstance := hInstance;
    TRegisterPluginCallback(g_extraparameters.RegisterPluginCallback)(ThisDllInstance, @MynSysCallBack);
  end;
end;
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39319994
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, вроде и все основные "премудрости".
Еще можно поговорить о доступе к элементам GUI, тут можно посмотреть на nsis.pas, где вполне понятно реализован вспомогательный метод LogMessage(), в котором выполняется обращение к списку лог-сообщений.

Имхо, методов NSISDialog и LogMessage достаточно для большинства случаев взаимодействия с пользователем, и, раз уж в дело подключена Delphi, можно строить диалоги произвольной сложности средствами самой Delphi.
...
Полный проект со всеми примерами:
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39356399
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вопрос Как запустить процесс с правами AsUser из-под процесса с правами AsAdministrator? возник для запуска приложений из-под инсталлятора.

Было (высокие права "наследовались" от инсталлятора):

Код: javascript
1.
    Exec "$INSTDIR\BExpert.EXE"


Стало (приложение запускается с правами экплорера):
Код: javascript
1.
    Exec '"$WINDIR\explorer.exe"  "$INSTDIR\BExpert.EXE"'
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39356448
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Довольно странно, но в форме
Код: php
1.
ExecShell "$INSTDIR\BExpert.EXE"


- не работает. То есть, приложение запускается, но с высокими правами.

Т.обр., рабочая команда - вот такая:

Код: php
1.
    Exec '"$WINDIR\explorer.exe"  "$INSTDIR\BExpert.EXE"'
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39356452
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, в InnoSetup для этого есть флаг runasoriginaluser и функция ExecAsOriginalUser.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39356463
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerчччД, в InnoSetup для этого есть флаг runasoriginaluser и функция ExecAsOriginalUser.
Ну вот в NSIS я ничего схожего не нашел. :(
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39356467
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
NSIS или Inno Setup?
    #39666165
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как из скрипта NSIS проверить, существует ли мьютекс?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39666169
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39666184
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tactical Nuclear Penguin,

ОК, вот так сделал:

Код: vbnet
1.
2.
3.
4.
5.
6.
Function IsMutexExists
; В $R0 должено быть имя мьютекса.
; Если недоступен - возвращает 0, если доступен - не 0.
  System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "$R0") i .R0'
  System::Call 'kernel32::CloseHandle(i $R0) i .R0'
FunctionEnd
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39815260
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не подскажет ли кто-нибудь, как из nsis - плагина обратиться к методу другого nsis - плагина?
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39815281
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёНе подскажет ли кто-нибудь, как из nsis - плагина обратиться к методу другого nsis - плагина?

Хотел заюзать обычным образом LoadLibrary/GetProcAddress, но выяснилось, что во временной директории нужного плагина еще нет, если к нему еще не было обращения в скрипте... :(
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39815325
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёёёёёёНе подскажет ли кто-нибудь, как из nsis - плагина обратиться к методу другого nsis - плагина?

Хотел заюзать обычным образом LoadLibrary/GetProcAddress, но выяснилось, что во временной директории нужного плагина еще нет, если к нему еще не было обращения в скрипте... :(

Сделал так: вызываемый плагин методом явной инициализации. Этот метод вызываю в самом начале исполняемой части скрипта с опцией /NOUNLOAD. Это для того, чтобы во временную директорию при инсталляции сразу был помещен плагин.
Затем - LoadLibrary/GetProcAddress. Те методы плагина, которые написаны для вызова из скрипта NSIS с сигнатурой
Код: pascal
1.
2.
procedure ***(const hwndParent: HWND; const string_size: integer;
  const variables: PChar; const stacktop: pointer); cdecl;


- не вызываю, вместо них создал их близнецов (обычные, подходящие по контексту методы, не задействующие NSIS - engine).
Да, никаких BORLNDMM.DLL и проч.: nsis написан не на Delphi.
...
Рейтинг: 0 / 0
NSIS или Inno Setup?
    #39824116
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется запустить инсталлятор именно "с правами админа", если данный юзер - админ, но сидит под UAC.
То есть, RequestExecutionLevel д.б. в " admin ".

Если же юзер не админ - то запускать инсталлятор следует с правами "пользователь".
То есть, RequestExecutionLevel д.б. в " user ".

Беда в том, что RequestExecutionLevel - это компалтайм опция, определяет содержимое манифеста, вкомпиляемого в инсталлятор.

Как бы сделать?
...
Рейтинг: 0 / 0
159 сообщений из 159, показаны все 7 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NSIS или Inno Setup?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]