Компиляция условий сценария NSIS, основанная на существовании файла - PullRequest
4 голосов
/ 09 июля 2009

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

Условия легко установить во время компиляции, если на диске существует определенный файл, можно использовать альтернативный брендинг. Я знаю, что мог бы использовать параметр командной строки для makensis.exe, чтобы обеспечить такое поведение, но было бы лучше, если бы компилятор мог позаботиться об этом для меня.

Есть ли способ сделать логику типа "IfExist" во время компиляции?

Ответы [ 2 ]

6 голосов
/ 09 июля 2009
!macro CompileTimeIfFileExist path define
!tempfile tmpinc
!system 'IF EXIST "${path}" echo !define ${define} > "${tmpinc}"'
!include "${tmpinc}"
!delfile "${tmpinc}"
!undef tmpinc
!macroend

Section 
!insertmacro CompileTimeIfFileExist "$%windir%\explorer.exe" itsThere
!ifdef itsThere
MessageBox mb_Topmost yes
!else
MessageBox mb_Topmost no
!endif
SectionEnd

Примечание: используемая здесь системная команда! Предполагает, что вы компилируете в Windows

2 голосов
/ 09 июля 2009

У меня нет ответа на ваш общий вопрос об обнаружении файлов во время компиляции, но у меня есть решение того, что, по вашему мнению, вы пытаетесь выполнить.

Мои установщики используют что-то вроде этого:

В файле CustomBranding.nsh:

!define CUSTOM_BRANDING
!define APPNAME "Brand X"
!define LOGO "C:\Brand_X_Logo.png"

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

!include /NONFATAL "CustomBranding.nsh"
!ifndef CUSTOM_BRANDING
    !define APPNAME "Generic"
    !define LOGO "C:\Generic_Logo.png"
!endif

Это тот тип "альтернативного брендинга", о котором вы спрашиваете?

...