Цитата Oleg48:
Писать скрипты на NSIS начал недавно, чаще всего использовал мастер, почти незадумывался о коде »
|
Очень плохо, это очень мощный язык сценария, и сложный довольно для начинающих
Цитата Oleg48:
Если при запуске программы указываем ключ /PAS="пароль" , тогда если пароль правильный программа устанавливается без окна запроса пароля, если пароль неправильный то ничего непроисходит »
|
Здесь вы упустили очень важный момент, при тихом режиме (с ключом /S) всегда будет установка,
поэтому тоже нужна еще проверка на флаг тихого режима.
Цитата Oleg48:
неочень нравится переходы на метки, считаю что это неочень правильно »
|
Дикий код, но пойдет
, накидал пример на логических конструкциях (на мой взгляд более правильный подход всегда использовать в скриптах, чем голые метки), пример на принципе если пароль неверен
вызываем функцию прерывания установки - просто и эффективно.
читать дальше »
Код:
!include "FileFunc.nsh"
!include "nsDialogs.nsh"
!include "winmessages.nsh"
!include "logiclib.nsh"
outfile test.exe
var dialog
var pass
var rezul
Page custom fnCustomInit fnCustomDestroy
Page InstFiles ;страничка устаноки
Function .onInit
ClearErrors ;очищаем принудительно флаг ошибки для корректной отработки кода
${GetOptions} $CMDLINE "/PAS=" $rezul
${If} ${Silent} ;функцию проверки пароля, запускаем, если тихий режим И
${AndIf} $rezul != ПАРОЛЬ ;неверный пароль, т.е логика И
Call CheckPass
${EndIf}
ClearErrors ;очищаем принудительно флаг ошибки для корректной отработки кода
FunctionEnd
Function fnCustomInit
${If} $rezul != ПАРОЛЬ ;если ключ правильный, то не показываем кастомную страничку, если не тихий режим.
nsDialogs::Create 1018
Pop $dialog
${NSD_CreateText} 83u 40u 90u 12u $rezul
Pop $pass
nsDialogs::Show
${EndIf}
FunctionEnd
Function fnCustomDestroy
${NSD_GetText} $pass $rezul
${If} $rezul != ПАРОЛЬ
Call CheckPass
${EndIf}
FunctionEnd
Function CheckPass ;функция прерывания
MessageBox MB_ICONSTOP "Неверный пароль !!!"
Abort ; конец иницилизации
FunctionEnd
Section "MainSection" SEC01
MessageBox MB_ICONINFORMATION|MB_OK "$rezul" IDOK
SectionEnd