Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
почему нельзя Два раза проверять файлы? »
а более конкретно ?
icq99999999
20-10-2013, 21:12
а более конкретно ? »
105625
есть 2 файла рядом с exe нужно в зависимости от того есть они или нету выполнять действия
в этом коде у меня ничего не получается
kotkovets
20-10-2013, 22:38
icq99999999, если вы не в состоянии разобраться в переходах и метках, то пишите так:
!include "LogicLib.nsh"
${If} ${FileExists} "$EXEDIR\mod.ini"
;+100500 команд, если есть файл
${Else}
;+100500 команд, если нет файла
${EndIf}
---
зы. две метки с одним именем не могут сосуществовать..
kotkovets, откуда можно узнать список тех команд, которые можно применить с ${If} ?. Например вы вверху написали ${If} ${FileExists}, а я этого не знал :) (про IfFileExists конечно знал)
kotkovets
21-10-2013, 09:15
откуда можно узнать список тех команд »
справочник: Логические конструкции
из файла примера и logiclib.nsh..
которые можно применить с ${If} »
можно и самому сделать конструкций..
alexfinik
21-10-2013, 11:01
Я конечно, дико извиняюсь, но вот это http://forum.oszone.net/post-2236753-599.html неужто никто не знает. Как сделать неизменяемым значение переменной на протяжении трех функций?
alexfinik,
Честно говоря, не фига не понятно что ты хочешь.. Если неизменность значения переменной, взятого из текстового поля на первой страницы - для остальных страниц, то это вроде как очевидно, типа :
!include "MUI2.nsh"
OutFile "3customPage.exe"
page custom func1
page custom func2
page custom func3
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
Var Txt
Function func1
nsDialogs::Create 1018
pop $0
!insertmacro MUI_HEADER_TEXT_PAGE "Первая страница" ""
${NSD_CreateText} 0 25u 100% 13u "1"
Pop $Txt
${NSD_GetText} $Txt $1
MessageBox MB_OK "$1"
nsDialogs::Show
FunctionEnd
Function func2
nsDialogs::Create 1018
pop $0
!insertmacro MUI_HEADER_TEXT_PAGE "Вторая страница" ""
Pop $Txt
MessageBox MB_OK "$1"
nsDialogs::Show
FunctionEnd
Function func3
nsDialogs::Create 1018
pop $0
!insertmacro MUI_HEADER_TEXT_PAGE "Третья страница" ""
MessageBox MB_OK "$1"
nsDialogs::Show
FunctionEnd
Section
SectionEnd
Если не то, объясни понятнее...
список тех команд, которые можно применить с ${If} ? »
Док гласит так :
Conditionally executes a block of statements, depending on the value of an expression.
Syntax:
${If} expression
The following "expressions" are available:
Standard (built-in) string tests (which are case-insensitive):
a == b; a != b
Additional case-insensitive string tests (using System.dll):
a S< b; a S>= b; a S> b; a S<= b
Case-sensitive string tests:
a S== b; a S!= b
Standard (built-in) signed integer tests:
a = b; a <> b; a < b; a >= b; a > b; a <= b
Standard (built-in) unsigned integer tests:
a U< b; a U>= b; a U> b; a U<= b
64-bit integer tests (using System.dll):
a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b
Built-in NSIS flag tests:
${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
Built-in NSIS other tests:
${FileExists} a
Any conditional NSIS instruction test:
${Cmd} a
Section flag tests:
${SectionIsSelected} a; ${SectionIsSectionGroup} a;
${SectionIsSectionGroupEnd} a; ${SectionIsBold} a;
${SectionIsReadOnly} a; ${SectionIsExpanded} a;
${SectionIsPartiallySelected} a
Examples:
Check if condition is met
StrCpy $0 true
${If} $0 == true
MessageBox MB_OK "It's true"
${Else}
MessageBox MB_OK "This will never be true"
${EndIf}
Integer tests
${If} 1 > 0
MessageBox MB_OK "1 is greater than 0"
${EndIf}
${If} 2 > 1
${AndIf} 2 < 3
MessageBox MB_OK "2 is greater than 1 and smaller than 3"
${EndIf}
File conditions
${If} ${FileExists} $SYSDIR\notepad.exe
Exec $SYSDIR\notepad.exe
${Else}
MessageBox MB_OK "Could not find notepad.exe"
${EndIf}
${If} ${FileExists} $PROGAMFILES\*.*
MessageBox MB_OK "Directory $$PROGRAMFILES exists"
${EndIf}
Section test
Section "My Section" mySection
MessageBox MB_OK "Executing section"
${If} ${SectionIsSelected} ${mySection}
MessageBox MB_OK "It's selected, dummy!"
${EndIf}
SectionEnd
kotkovets, если в NSIS 3.0a1 сделать unicode установщик, то ${WinVersion} в Windows 8.1 выдаст 6. вместо 6.3
alexfinik
21-10-2013, 15:02
MKN, В func1 задается переменная. В msgbox в func3 отображается заданное значение этой переменной. У меня оно пустое... Я, наверное, плохо объясняю. Сейчас понятно объяснил?
Твой скрипт эту задачу не выполняет - проверил. Задаю 5 - отображает 1
Задаю 5 - отображает 1 »
С чего бы вдруг ? Задаю 5 - отображается ессно 5. Задаю 25 - 25 и т.д. Только надо добавить регистрацию изменений ввода.
Я ведь только пример привёл основы.
alexfinik
21-10-2013, 15:35
MKN, разобрался. Зря использовал в Test1Leave и Test2Leave "${NSD_GetText} $R4 $R4"
Это я про свой пример http://www.oszone.net/go.php?url=http://forum.oszone.net/post-2236753-599.html
Про ваш - ну если ничего не править - выдавало что сказал. Почему - сам не понял... Вроде всё ок должно быть...
Вот так работает:
!include nsDialogs.nsh
!include LogicLib.nsh
!include zipdll.nsh
!include MUI2.nsh
!include NSISArray.nsh
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
Name "Формирование установочных файлов -"
OutFile testik.exe
XPStyle on
Var Dialog
Var Label1
Var Label2
Page custom Test0 Test0Leave
Page custom Test1 Test1Leave
Page custom Test2 Test2Leave
Page instfiles
Function Test0
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Тестирование №0"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "1"
Pop $9
nsDialogs::Show
FunctionEnd
Function Test0Leave
${NSD_GetText} $9 $9
MessageBox MB_OK "Переменная=$9" ;выдает Переменная=1
FunctionEnd
Function Test1
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
nsDialogs::Show
FunctionEnd
Function Test1Leave
;${NSD_GetText} $9 $9
FunctionEnd
Function Test2
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
nsDialogs::Show
FunctionEnd
Function Test2Leave
;${NSD_GetText} $9 $9
MessageBox MB_OK "Переменная=$9" ;выдает Переменная=
FunctionEnd
Section
SectionEnd
alexfinik,
Если надо править, то добавь OnChange, как уже вышесказано :
......
Pop $Txt
${NSD_OnChange} $Txt Change
nsDialogs::Show
FunctionEnd
Function Change
Pop $Txt
${NSD_GetText} $Txt $1
FunctionEnd
......
alexfinik
21-10-2013, 19:10
MKN, хм, а зачем, если у меня работает и так?
Правда есть другой "простой", просто "элементарный" вопрос.
По запросу "числа", "сложение" - я ничего не нашел
Как выполнить операцию $NumMan=$NumMan-1 ??
У меня for работает только с нуля почему-то. Приходят в голову всякие извраты типа сделать строку длиной $NumMan Отнять единицу, подсчитать его размер и присвоить $NumMan. Бывает что-то попрощу? Плохо ли искал в мануале, но нашел только сравнение чисел...
Терпеть не могу писать в форумы, а вот зачастил что-то... И главное простейший вопрос, а не нашел ничего...
kotkovets
21-10-2013, 19:30
Как выполнить операцию $NumMan=$NumMan-1 ?? »
IntOp $NumMan $NumMan - 1
alexfinik
21-10-2013, 19:40
kotkovets, Спасибо! Нашел еще вот такое:
System::Int64Op $NumMan - 1
Pop $NumMan
Хотя у меня 64-битная система, но NSIS не 64-бит. Ну что попалось.
kotkovets
21-10-2013, 19:51
Нашел еще вот такое:
System::Int64Op $NumMan - 1
Pop $NumMan »
разрядность здесь по барабану - позволяет работать с большими числами, чем IntOp
Limonica
22-10-2013, 17:33
Ошибка в WinVer2.nsh:
http://dropi.ru/hLy.jpg
Система Windows XP SP2 Home Edition.
alexfinik
22-10-2013, 19:19
Limonica, а вы уверены, что это ошибка? Может просто неверно используете модуль? Похоже на вывод справки.
kotkovets
22-10-2013, 20:35
Ошибка в WinVer2.nsh: »
макрос FUNC_WindowsServerName ($WinServerName) не может по сценарию возвращать - Home Edition
проверял на WinXP Professional:
http://img203.imageshack.us/img203/7199/l5hn.png
---
vahe-91 по поводу юникода:
http://img844.imageshack.us/img844/9172/eeuv.png
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC