Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата 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

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Отправлено: 00:55, 28-09-2011 | #1663