PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

vahe-91
20-10-2013, 21:02
почему нельзя Два раза проверять файлы? »
а более конкретно ?

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}

---
зы. две метки с одним именем не могут сосуществовать..

vahe-91
21-10-2013, 00:36
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 неужто никто не знает. Как сделать неизменяемым значение переменной на протяжении трех функций?

MKN
21-10-2013, 13:53
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
Если не то, объясни понятнее...

MKN
21-10-2013, 14:20
список тех команд, которые можно применить с ${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

vahe-91
21-10-2013, 14:55
kotkovets, если в NSIS 3.0a1 сделать unicode установщик, то ${WinVersion} в Windows 8.1 выдаст 6. вместо 6.3

alexfinik
21-10-2013, 15:02
MKN, В func1 задается переменная. В msgbox в func3 отображается заданное значение этой переменной. У меня оно пустое... Я, наверное, плохо объясняю. Сейчас понятно объяснил?
Твой скрипт эту задачу не выполняет - проверил. Задаю 5 - отображает 1

MKN
21-10-2013, 15:26
Задаю 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

MKN
21-10-2013, 15:42
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