Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
 Re: NSIS или Inno Setup?  [new]
sqllex
Member

Откуда: Kiev
Сообщений: 712
NextMan

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

Section "Первая секция" var_index

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

SectionEnd

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

Если нужна функция, в которой нужно обработать значение по имени var_index, то ее тело должно быть ниже по тексту скрипта.
Либо передавай значение var_index в функцию перед вызовом через стек.
20 окт 08, 17:57    [6331394]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
sqllex

Либо передавай значение var_index в функцию перед вызовом через стек.

Ну привет...
Весь вопрос и состоит в том, чтобы узнать, чему равен индекс. Если я буду знать, что передать, то мне и функция не нужна.


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

!macro MyMacro
  ...
  ...
  ...
!macroend

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

Section "Любая секция" sect_index
...
  !insertmacro MyMacro
...
SectionEnd

Задача состоит в том, чтобы макрос напечатал либо имя секции "Любая секция", либо значение ее индекса sect_index.
Андырстэнд?
20 окт 08, 22:14    [6332106]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
GoodMind
Member

Откуда: Москва
Сообщений: 140
А из хелпа пример не пойдет?

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
20 окт 08, 23:50    [6332289]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
GoodMind,

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


Ну как бы так еще сказать... Короче - нужен аналог "this" контекста текущей секции.
20 окт 08, 23:58    [6332305]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
GoodMind
Member

Откуда: Москва
Сообщений: 140
Ну так используй глобальную переменную
21 окт 08, 00:07    [6332314]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
Ну так и использую.
21 окт 08, 00:34    [6332351]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
sqllex
Member

Откуда: Kiev
Сообщений: 712
GoodMind
Ну так используй глобальную переменную

Индекс секции - это и так глобальная переменная.

NextMan, а можно привести текст макроса. Я, хоть убей, не могу понять, что же тебе нужно. В каком контексте ты используешь индекс секции?
21 окт 08, 00:38    [6332358]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
Бобик2
Guest
Ребята, вы здесь все специалисты. Быть может подскажете в чем может быть проблема с 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. Даже нет толкового описания синтаксиса. Приходится каждую буковку выковыривать.
26 апр 09, 17:35    [7115174]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
Бобик2
Guest
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) сделать разбиение текста на две и более строки.
26 апр 09, 21:13    [7115422]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
Бобик2
...
Примеры NSIS слабенькие, многие просто не доведены до конца: тот же StartMenu (NSIS\Examples\StartMenu\) - группу создают, но не удаляют.
...
Удаляем обычными операциями с файлами/директориями.
...
Имхо, в примерах мало внимания уделено процессу деинсталляции.
В Инно это как бы все "само собой", а здесь - ты должен понимать, что делаешь. И, соответственно, проектировать инсталляцию с учетом будущей деинсталляции.
23 ноя 09, 13:48    [7964158]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
  StrCpy $1 "абвгд"


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


  ${IfNot} $1 == ""
# Теперь да
  ${EndIf}
23 ноя 09, 17:39    [7966265]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
Пипец...вот написал так написал...
24 ноя 09, 10:17    [7968163]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
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".
5 фев 10, 14:56    [8302337]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
NextMan
Member

Откуда:
Сообщений: 9744
Может быть, кому понадобится.

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

Пример.


### 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
...
5 фев 10, 15:04    [8302437]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
Всем привет.

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

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

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

Спасибо.
21 июн 13, 22:14    [14468154]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
Ага, третью версию недавно выпустили:

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


Гут.
21 июн 13, 23:19    [14468336]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
чччД
Ага, третью версию недавно выпустили:

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


Гут.

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

"Тройка" - пока первая падучая "альфа". А 2.хх, похоже, заморозили.
21 июн 13, 23:35    [14468394]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
чччД
Всем привет.

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

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

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

Спасибо.

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

             <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />

только делает это он через анус с помощью утилиты mt.exe из состава MS Visual Studio.
Проверил: работает, но требует установленного дотнета соответствующей версии.
Блин. Оставлю этот вариант "на сладкое", если ничего не придумаю.
21 июн 13, 23:40    [14468415]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
Ёпть, ну я и идиот. NSIS же опен-соурсе. Вкомпиляй в ресурсы какие хочешь манифесты, на здоровье!

~~~~~~

ЛЮ-У-У-У-ДИ! Кто-нибудь самостоятельно, из исходников собирал NSIS?
21 июн 13, 23:43    [14468427]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
чччД
Ёпть, ну я и идиот. NSIS же опен-соурсе. Вкомпиляй в ресурсы какие хочешь манифесты, на здоровье!

~~~~~~

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

Так, продолжаем тормозить...

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

Осталось найти способ все это "щасте" откомпилять или найти откомпиленную версию. Последний найтбилд делался сто лет назад.
22 июн 13, 00:07    [14468525]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
БлѢ ... 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, ставим. Не ставится. Не видит место, где инсталлировался питон. Выбор руками задизейблен...блин.
22 июн 13, 00:21    [14468583]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25605
Нсис умер, инно живет и местами процветает. Я им пользуюсь и все рады. Особенно корпоративнве клиенты.
22 июн 13, 00:23    [14468588]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
чччД
БлѢ ... 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, в которую прописываем путь в директорию инсталляции.

Теперь надо весь этот хлам откомпилять.
22 июн 13, 00:42    [14468648]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
чччД
Guest
wadman
Нсис умер...

С чего бы это? 20 мая третья версия вышла.
22 июн 13, 00:43    [14468654]     Ответить | Цитировать Сообщить модератору
 Re: NSIS или Inno Setup?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25605
чччД
20 мая третья версия вышла.

Естественное газообразование не есть развитие. :)
22 июн 13, 00:45    [14468659]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
Все форумы / Delphi Ответить