Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
19-08-2010, 09:17
hb860
FileOpen $0
$INSTDIR\file.dat a
IfErrors done
FileRead $0 $1
${WordReplace} $1 'gamedll "dlls\mp.dll"' 'gamedll dlls\newdll.dll' "+*" $R0
FileWrite $0 $R0
FileClose $0
done:
В этом коде не заменяется строка, а дописывается.
команда FileRead в этом коде читает только первую строку...а вдруг искомая строка не первая?
команда FileWrite - не умеет перезаписывать строки, а только записывать!
A команда WriteIniStr умеет перезаписывать , но работает только с файлами имеющие структуру inf или ini файла
!include "WordFunc.nsh"
!insertmacro WordReplace
OutFile Test.exe
Section ""
WriteINIStr $EXEDIR\Test.ini Path Directory "%programfiles%"
ReadINIStr $R0 $EXEDIR\Test.ini Path Directory
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1
WriteINIStr $EXEDIR\Test.ini Path Directory $R1
SectionEnd
Так, что сей способ не пригоден!
Вот чёрт, и правда
Ударил в грязь лицом :)
Испавил, добавил цикл. Файл создается в памяти в переменной R1 и перезаписывается в локации
Оформил макросом для удобства вызова в любом скрипте - просто вставить макрос и вызвать
Код и файлом во вложении
!include "WordFunc.nsh"
!insertmacro WordReplace
Name "Example1"
OutFile "example1.exe"
InstallDir $DESKTOP\Example1
RequestExecutionLevel user
Page directory
Page instfiles
!macro ReplaceInFile FileName FindWhat ReplaceWith
!Define ID ${__LINE__}
StrCpy $R1 ''
FileOpen $0 ${FileName} r
IfErrors done_${ID}
Repeat_${ID}:
Push $1
Push $R0
FileRead $0 $1
IfErrors Close_${ID}
${WordReplace} $1 "${FindWhat}" "${ReplaceWith}" "+" $R0
StrCpy $R1 $R1$R0
Goto Repeat_${ID}
Close_${ID}:
FileClose $0
FileOpen $0 ${FileName} w
IfErrors done_${ID}
FileWrite $0 $R1
FileClose $0
done_${ID}:
!undef ID
!macroend
Section "" ;No components page, name is not important
SetOutPath $INSTDIR
File file.gam
!InsertMacro ReplaceInFile "$INSTDIR\file.gam" "gamedll $\"dlls\mp.dll$\"" "Строка 1, которую нужно заменить"
!InsertMacro ReplaceInFile "$INSTDIR\file.gam" "gamedll_linux $\"dlls/cs_i386.so$\"" "Строка 2, которую нужно заменить"
SectionEnd ; end the section
A команда WriteIniStr умеет перезаписывать , но работает только с файлами имеющие структуру inf или ini файла »
А это чё такое? Я разве предлагал её использовать?
kotkovets
20-08-2010, 00:48
Цитата kotkovets:A команда WriteIniStr умеет перезаписывать »
В качестве примера :)
Оформил макросом »
Надо поучится мне макросы писать..
Belial4444
20-08-2010, 09:18
kotkovets, спасибо большое запахало, действительно надо было использовать функцию Bla1, а что касается той функции, которую я юзал, там даже значение переменной не выводилось). У меня ещё 2 вопроса: 1.если я хочу создать несколько своих страниц инсталятора, то как их нужно указывать по - другому. Не писать же Page custom Bla Bla1 два раза. Наверное надо Page custom Bla Bla1 (2) и что - то вроде этого? 2. Как можно командой File (или другой) исключить папку из сборки инсталятора, или наоборот включить её. С файлами я знаю, а про папки не нашел.
kotkovets
20-08-2010, 10:41
Не писать же Page custom Bla Bla1 два раза»
Page custom Bla Bla1
Page custom Bla2 Bla3 ; 2 страницa
File /r Папка\*.* - добавляет из каталога Папка все файлы включая вложенные папки
Belial4444
20-08-2010, 14:17
Ок, новый вопрос: как правильно посчитать координаты нужного места для размещения, надписи, картинки например. И как можно изменить картинку слева?) http://s45.radikal.ru/i108/1008/f3/fdf7eeab792f.png. И ещё: как можно сменить цвет фона установщика? Например как здесь http://s45.radikal.ru/i108/1008/80/19680a3a23c8.png
kotkovets
20-08-2010, 14:44
как правильно посчитать координаты нужного места для размещения, надписи, картинки »
как то путем проб всё время: одно значение меняешь и смотришь изменения...... :unsure:
${NSD_CreateLabel} <координатаХ> <координатаУ> <Ширина> <Высота> <”Текст”>
И как можно изменить картинку слева? »
!define MUI_WELCOMEFINISHPAGE_BITMAP "Путь\картинка.bmp"
картинка должна быть размерами 164 x 314
Примеры картинок в каталоге NSIS\Contrib\Graphics\Wizard
Belial4444
20-08-2010, 14:53
Ок спасибо), про размеры догадывался, раньше через smart install maker делал там такие же)
CyberMaster
21-08-2010, 10:55
Подскажите пожалуйста, как сделать что бы после инсталляции сразу открывало сайт (без запроса) ?
kotkovets
21-08-2010, 13:30
как сделать что бы после инсталляции сразу открывало сайт (без запроса) ? »
Function .onInstSuccess
HideWindow
Exec 'RUNDLL32 url.dll, FileProtocolHandler "http://forum.oszone.net/"'
FunctionEnd
kotkovets, проще надо быть, проще!
Чёй то вы там понаписали?
Во:
ExecShell "open" "http://www.winreview.ru"
kotkovets
22-08-2010, 19:10
Ах да да!!! :tomato2:
как раз был открыт Справочник по командам Windows (http://soft.oszone.net/program/9208/Spravochnik_po_komandam_OS/) :happy:
Есть исходник NSIS (http://rghost.ru/2421842), в скрипте которого я мало чего понимаю. Если скомпилить скрипт, то в компонентах увидим чекбокс 'Mozilla plugin'. Скажите, плиз, есть ли в инсталляторе проверка на то, установлена ли в системе Мозила? Я подозреваю, что она должна быть, то есть, если Мозила установлена, то галка на чекбоксе установлена, если нет, то и галка снята. Если такая проверка есть, подскажите, на какой маркер он ссылается, узнает, установлена ли Мозила или нет. Или нет там такой проверки?
Комсомолец
24-08-2010, 15:22
boss911, скрипт в студию.
kotkovets
25-08-2010, 00:43
boss911,
Скрипт весь в макросах.......ужас.Сложновато чытаты :o
Скажите, плиз, есть ли в инсталляторе проверка на то, установлена ли в системе Мозила? »
при инсталляции похоже нету......
!ifdef INSTALL_MOZILLA
Section /o $Name_Section03 SEC03
SectionIn 3
SetOutPath "$INSTDIR"
!insertmacro OpenUninstallLog
!insertmacro InstallFile mozilla\npvlc.dll
!insertmacro InstallFile mozilla\npvlc.dll.manifest
!insertmacro CloseUninstallLog
!define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
WriteRegStr HKLM ${Moz} "Product" "VLC media player"
WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
WriteRegStr HKLM ${Moz} "Version" "${VERSION}"
SectionEnd
!endif
У этой секции всегда снята галочка
а вот при деинсталяции чета есть:
; Check for Key
EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
StrCmp $R0 "" "${Index}-End"
IntOp $R1 $R1 + 1
ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
StrCmp $R2 "" "${Index}-Loop" ""
; old files (0.8.5 and before) that may be lying around
Delete /REBOOTOK "$R2\npvlc.dll"
Delete /REBOOTOK "$R2\libvlc.dll"
Delete /REBOOTOK "$R2\vlcintf.xpt"
Goto "${Index}-Loop"
EnumRegKey - перебирает ключи реестра в ветке HKLM "SOFTWARE\Mozilla"
Проверяет, какая версия, Mozilla
ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
Читает путь, к плагинами Mozilla
при инсталляции похоже нету...... »
Спасибо, я так и подозревал.
Дело в том, что я пишу скрипт для Inno, там хочу сделать проверку установки Мозилы в системе, но я не знаю, где в системе найти подходящий маркер, что она действительно установлена. Думал, что нечто подобное реализовано в скрипте NSIS для VLC. А вот это:
EnumRegKey - перебирает ключи реестра в ветке HKLM "SOFTWARE\Mozilla"
Проверяет, какая версия, Mozilla »
не решает мою задачу. Для эксперимента, я у друга взял папку с установленной Мозилой и запустил ее у себя, так в "HKLM, SOFTWARE\Mozilla" ничего не записалось. Так что, это плохой маркер для обнаружения установленной Мозиоы, так как его там может просто не существовать. Буду искать что-то другое, более надежнее.
kotkovets
25-08-2010, 02:15
boss911
При инсталяции Mozilla ветка "HKLM, SOFTWARE\Mozilla" создается, тока проверил.
там же и версия и путь к Mozilla
А за скрипт спасибо! будет на чем тренироваться
При инсталяции Mozilla ветка "HKLM, SOFTWARE\Mozilla" создается, тока проверил. »
Для эксперимента, я у друга взял папку с установленной Мозилой и запустил ее у себя, так в "HKLM, SOFTWARE\Mozilla" ничего не записалось. »
То есть, запись создает инсталлятор Мозилы, но не она сама. Кто-то возьмет себе портабл версию Мозилы, как я, и записи "HKLM, SOFTWARE\Mozilla" не будет, то есть, этот маркер обнаружения Мозилы в системе не надежный, вот об этом я и говорю. Ладно, то такое, поищу что-то другое, а если не найду, то и фиг с ним. То, что я хотел узнать из этого скрипта, я уже узнал благодаря вам, спасибо еще раз.
asetin_9207
25-08-2010, 23:26
Здравствуйте, я этом деле я новичок, поэтому не прошу сильно судить, будут несколько вопросов к вам и рассчитываю на вашу помощь.
Занялся сборкой установщика и возникло несколько вопросов:
1. На приветствии установщика я использовал и имя, и версию, но почему-то версия скосилась и ее практически не видно... Удлинять имя не стал и не буду, так как нужно, чтобы именно с таким именем и было.
Вот, собственно, сам скриншот: http://rghost.ru/2442700.view
Кто знает как исправить и чтобы все нормально было видно?
2. Имеются 2 секции в одной группе, но нужно сделать так, чтобы при выборе одной секции невозможно было выбрать одновременно другую (блокировалось), так же и наобороот. Может кто знает код или переменную?
3. В компонентах устанавливаемой программы имеется иконка (справа). Так вот как ее сменить, чтобы она отличалась от иконки окна установщика (заголовок) и какой максимальный размер можно при этом употребить?
Вот, собственно, сам скриншот: http://rghost.ru/2442761.view
4. Кто знает как делать предустановочную анимацию? Например, запустил установщик и сначала вылезло небольшое видео, а потом открылось само окно установщика.
kotkovets
26-08-2010, 00:11
но почему-то версия скосилась и ее практически не видно »
почитайте ранние посты там уже это было
чтобы при выборе одной секции невозможно было выбрать одновременно другую »
Name "One Section"
OutFile "one-section.exe"
RequestExecutionLevel user
Page components
Section "Group 1 - Option 1" g1o1
SectionEnd
Section /o "Group 1 - Option 2" g1o2
SectionEnd
Function .onInit
StrCpy $1 ${g1o1} ; Group 1 - Option 1 is selected by default
FunctionEnd
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${g1o1}
!insertmacro RadioButton ${g1o2}
!insertmacro EndRadioButtons
FunctionEnd
Кто знает как делать предустановочную анимацию? »
http://nsis.sourceforge.net/AnimGif_plug-in
В компонентах устанавливаемой программы имеется иконка (справа). Так вот как ее сменить, чтобы она отличалась от иконки окна установщика (заголовок) и какой максимальный размер можно при этом употребить? »
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "Мой рисунок.bmp"
Если нужно справа, то добавляем:
!define MUI_HEADERIMAGE_RIGHT
Размер картинки: 150x57
Почитайте
Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC