PDA

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


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

wolkow70
09-02-2012, 17:28
kotkovets,
Я еще пользуюсь DelRegKey.nsh. Как они соотносятся с RegistryFunc.nsh?

kotkovets
09-02-2012, 17:34
Я еще пользуюсь DelRegKey.nsh. Как они соотносятся с RegistryFunc.nsh? »
никак, RegistryFunc.nsh это расширенное на порядок продолжение DelRegKey.nsh
не требующая плагина Registry, библиотека написана на чистом API

BuZzOFF
10-02-2012, 07:23
kotkovets, и снова здравствуйте :)
Ничего в языке NSIS не понимаю. и в англицком тоже...
Листаю тему, да леплю всякую "бяку" из нескольких примеров. И, что неудивительно, ничего не получается :laugh:

Хочу сделать поиск в файле hosts определённой строки...
----------------------------------------------------------
!include "TextFunc.nsh"
!define ${LineFind}
----------------------------------------------------------
Section
${If} ${LineFind} "$SYSDIR\drivers\etc\hosts" "/NUL" "1:-1" "LineFindFunction"
ExecWait '$\"${OutDir}\setup.exe$\" --mode=Silent'
${Else}
ExecWait '$\"${OutDir}\medicine\hosts.exe$\"'
ExecWait '$\"${OutDir}\setup.exe$\" --mode=Silent'
${EndIf}
SectionEnd

Function "LineFindFunction"
StrCpy $R0 "$R9" 11
StrCmp $R0 "127.0.0.1 activate.adobe.com" 0 nofind
StrCpy $R1 "$R9" "" 12
Push "StopLineFind"
nofind:
Push $0
FunctionEnd

Но при компиляции ошибка:
!insertmacro: _If
!insertmacro: macro "_If" requires 4 parameter(s), passed 7!
Error in script "H:\package\MyScript.nsi" on line 116 -- aborting creation process

Интересно, но нифига непонятно :teeth:

Krinkels
10-02-2012, 09:18
BuZzOFF
Дык сначала нужно было хоть справочник из шапки почитать, вот пример логической конструкции:
Section
StrCpy $0 11
${If} $0 == 11
MessageBox MB_OK $$0=11
${ElseIf} $0 == 12
MessageBox MB_OK $$0=12
${Else}
MessageBox MB_OK "прочие значения $$0"
${EndIf}
SectionEnd

BuZzOFF
10-02-2012, 09:29
Дык сначала нужно было хоть справочник »Дык я читал.. Но невсё. Многое не понятно.
Так же как и в Вашей этой самой логической конструкции.

Если бы на конкретном примеру поглядеть, то мож чего и сообразил.
А так эти цифры мне ничего не говорят :teeth:

Тонкий намёк на помощь.. :)

kotkovets
10-02-2012, 09:51
BuZzOFF, Чем обусловлено применение жесткой константы ${OutDiR} ?
Если рядом с установщиком сетап, то переменная $exedir - возвращает текущую папку инсталлятора.
Хочу сделать поиск в файле hosts определённой строки... »
Здесь нужно учитывать знак каретки - окончания/начало строки.
!include "MUI2.nsh"
!include "textfunc.nsh"

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

ShowInstDetails show
OutFile "aap.exe"
var int

Function "LineFindFunction"
${If} $R9 == "127.0.0.1 activate.adobe.com$\r$\n"
${OrIf} $R9 == "127.0.0.1 activate.adobe.com"
StrCpy $R1 "$R9" "" 12
StrCpy $int 1 ;если найдена строка, то делаем значение $int = 1
Push "StopLineFind"
${EndIf}
Push $0
FunctionEnd

Section
StrCpy $int 0
${LineFind} "$SYSDIR\drivers\etc\hosts" "/NUL" "1:-1" "LineFindFunction"
${If} $int == 1
;ExecWait '"${OutDir}\setup.exe" --mode=Silent'
${Else}
;ExecWait "${OutDir}\medicine\hosts.exe"
;ExecWait '"${OutDir}\setup.exe" --mode=Silent'
${EndIf}
SectionEnd
Мне не понятна применение команды в коде
StrCpy $R1 "$R9" "" 12
я не вижу в функции LineFindFunction дальнейшие работы с переменной $R1, куда скидывается 12 символов строки.

BuZzOFF
10-02-2012, 10:08
Чем обусловлено применение жесткой константы ${OutDiR} ? »
!define OutDir "$WINDIR\Temp\ADBEAFETCS4_LS7"Это чтоб путь к папке менять удобней было. В одном месте исправил и всё...
Или Вы не это имели ввиду? :)

Мне не понятна применение команды в коде »Мне тоже. Я это тут увидал => #1212 (http://forum.oszone.net/post-1683183-1212.html)

Спасибо за помощь.

А Вы это (http://forum.oszone.net/post-1853014-2280.html) на x64 проверяли? У меня не работает.. Сразу выскакивает сообщение, что памяти не хватает. Говорит что -1 byte. Да и на x64 думаю можно отключить. Там всё равно по-любому больше 1ГБ будет...

kotkovets
10-02-2012, 10:26
Чем обусловлено применение жесткой константы ${OutDiR} ? » »
теперь ясно, я думал ваш сетап будет рядом с установщиком.
Мне тоже. Я это тут увидал => #1212 »
Теперь понятно....из строки берется n символов, для поиска нужного выражения
Function "LineFindFunction"
;здесь вам нужно отсекать нуженое количество символов в начале строки
;чтобы получить выражения
;127.0.0.1 activate.adobe.com$\r$\n или 127.0.0.1 activate.adobe.com
StrCpy $R0 "$R9" "" 12
;;;;;
${If} $R0 == "127.0.0.1 activate.adobe.com$\r$\n"
${OrIf} $R0 == "127.0.0.1 activate.adobe.com"
StrCpy $int 1 ;если найдена строка, то делаем значение $int = 1
Push "StopLineFind"
${EndIf}
Push $0
FunctionEnd
А Вы это на x64 проверяли? »
нет, вы правильно заметили, что нет смысла, и я написал, что это нужно сверхредко...
!include "x64.nsh"
;--
${IfNot} ${RunningX64}
;команды опр. физ памяти
${Endif}

diakov
11-02-2012, 09:53
kotkovets, такой вопрос когда пишу код в скрипте

CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\PotPlayerMini.exe"
в свойствах якрлыка получаю
"C:\Program Files\DAUM\PotPlayer\PotPlayerMini.exe"

как сделать что бы в свойствах ярлыка получить
"C:\Program Files\DAUM\PotPlayer\PotPlayerMini.exe" /RegisterAll
пробовал так

CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" '"$INSTDIR\PotPlayerMini.exe" /RegisterAll'
не получается...

kotkovets
11-02-2012, 12:11
diakov, в справочнике все расписано, введите в указателе - CreateShortCut
CreateShortCut "Расположение_ярлыка.lnk" "Путь_до_файла.exe" "параметры_запуска" "Файл_иконки" "Индекс_иконки" "Тип_окна" "Горячая_клавиша" "Описание_ярлыка"

diakov
13-02-2012, 17:19
kotkovets, вот такая ситуация, есть 5 чекбоксов, для 3 надо сделать так чтобы выбирался только один из них (языки установки).

kotkovets
13-02-2012, 17:51
Насколько я понял, имеются в виду радиобутоны на своей страничке
http://nsis.sourceforge.net/NsDialogs_FAQ
Объединяем чебоксы в "свои" группы переключений:
!include "MUI2.nsh"

OutFile "radio"
ShowInstDetails Show

Page custom CreatePage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Section ""
SectionEnd

var dlg
var radiobox1
var radiobox2
var radiobox3
var radiobox4
var radiobox5

Function CreatePage
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateRadioButton} 0u 0u 120u 12u "RadioButton1"
Pop $radiobox1
${NSD_CreateRadioButton} 0u 15u 120u 12u "RadioButton2"
Pop $radiobox2
${NSD_SetState} $radiobox1 1
${NSD_AddStyle} $radiobox1 ${WS_GROUP}
;----
${NSD_CreateRadioButton} 0u 40u 120u 12u "RadioButton3"
Pop $radiobox3
${NSD_CreateRadioButton} 0u 55u 120u 12u "RadioButton4"
Pop $radiobox4
${NSD_CreateRadioButton} 0u 70u 120u 12u "RadioButton5"
Pop $radiobox5
${NSD_SetState} $radiobox3 1
${NSD_AddStyle} $radiobox3 ${WS_GROUP}
nsDialogs::Show
FunctionEnd

diakov
13-02-2012, 18:08
Ага тоесть оперировать, именно радиобутонами...ато я хотел так
http://s54.radikal.ru/i145/1202/d3/e2087f521e45.jpg

kotkovets
13-02-2012, 18:34
...ато я хотел так »
большая куча кода и много потеряного времени...

diakov
13-02-2012, 18:45
будем пробовать...

BuZzOFF
17-02-2012, 13:28
kotkovets,
Опять я с поиском в файле :)
Есть файл "Adobe After Effects CS5*.log" (* - это дата).
Нужно найти строчку "Exit Code:", начинать искать с 27 строчки.
И чтоб когда нашлось вылазило окно "Exit Code: и то что после этого написано" "Ok" ( к примеру "Exit Code: 0 - No error")
Но при этом нужно оставить ещё вот это (http://forum.oszone.net/post-1855400-2306.html).

kotkovets
17-02-2012, 15:06
Нужно найти строчку "Exit Code:", начинать искать с 27 строчки.
И чтоб когда нашлось вылазило окно "Exit Code: и то что после этого написано" "Ok" ( к примеру "Exit Code: 0 - No error") »
Макрос позваляет читать файл с нужной строки, заданный интервал строк

;27 - прочитать только 27 строку сначала файла
;-27 - прочитать только 27 строку с конца файла
;5:9 - прочитать с 5 по 9 строку включительно
;27:-1 - прочитать с 27 строки до конца

${LineFind} "txt.txt" "/NUL" "27:-1" "LineFind"

Function "LineFind"
;в переменную $R0 помещаем первые 10 символов строки
StrCpy $R0 $R9 10
;Exit Code: --> 10 символов
${If} $R0 == "Exit Code:"
MessageBox MB_OK "$R9" IDOK
;StrCpy $0 StopLineFind ;если нужно делаем прерывание чтения
${EndIf}
Push $0
FunctionEnd

diakov
18-02-2012, 15:46
kotkovets, такой вопрос


Section "Установить надстройку"
${If} $Check5 == 1
CreateDirectory "$PROGRAMFILES\Minilyrics"
SetOutPath "$PROGRAMFILES\Minilyrics"
File /r "D:\Aimp\MiniLyric\*.*"
CreateDirectory "$APPDATA\MiniLyrics"
SetOutPath "$APPDATA\MiniLyrics"
File /r "D:\Aimp\MiniLyrics\*.*"
${If} ${RunningX64}
SetOutPath "$INSTDIR\Plugins"
File /r "D:\Aimp\gen_MiniLyrics.dll"
File /r "D:\ystanovka\MLPlugin.ini"
${Else}
SetOutPath "$INSTDIR\Plugins"
File /r "D:\Aimp\MLPlugin.ini"
File /r "D:\Aimp\gen_MiniLyrics.dll"
${EndIf}
SetShellVarContext all
WriteRegStr HKCU "MUI_LANGDLL_REGISTRY_KEY" "MUI_LANGDLL_REGISTRY_VALUENAME" "1033"
WriteRegStr HKCU "Software\MiniLyrics" "InstallerLanguage" "1033"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить Minilyrics.lnk" "$PROGRAMFILES\Minilyrics\Minilyrics.exe"
${EndIf}
SectionEnd


Не создает папку $APPDATA\MiniLyrics и не копирует туда D:\Aimp\MiniLyrics\*.* что тут не так?

kotkovets
18-02-2012, 17:02
такой вопрос
Правильнее так:
Section "Установить надстройку"
SetShellVarContext all
${If} $Check5 == 1
SetOutPath "$PROGRAMFILES\Minilyrics"
File /r "D:\Aimp\MiniLyric\*.*"
SetOutPath "$APPDATA\MiniLyrics"
File /r "D:\Aimp\MiniLyrics\*.*"
${If} ${RunningX64}
SetOutPath "$INSTDIR\Plugins"
File "D:\Aimp\gen_MiniLyrics.dll"
File "D:\ystanovka\MLPlugin.ini"
${Else}
SetOutPath "$INSTDIR\Plugins"
File "D:\Aimp\MLPlugin.ini"
File "D:\Aimp\gen_MiniLyrics.dll"
${EndIf}
WriteRegStr HKCU "MUI_LANGDLL_REGISTRY_KEY" "MUI_LANGDLL_REGISTRY_VALUENAME" "1033"
WriteRegStr HKCU "Software\MiniLyrics" "InstallerLanguage" "1033"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить Minilyrics.lnk" "$PROGRAMFILES\Minilyrics\Minilyrics.exe"
${EndIf}
SectionEnd

А может надо SetShellVarContext current

diakov
18-02-2012, 17:18
Счас попробую...




© OSzone.net 2001-2012