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

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

Так, что сей способ не пригоден!

hb860
20-08-2010, 00:38
Вот чёрт, и правда
Ударил в грязь лицом :)

Испавил, добавил цикл. Файл создается в памяти в переменной 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

hb860
22-08-2010, 18:12
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:

boss911
23-08-2010, 23:27
Есть исходник 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

boss911
25-08-2010, 01:49
при инсталляции похоже нету...... »
Спасибо, я так и подозревал.

Дело в том, что я пишу скрипт для Inno, там хочу сделать проверку установки Мозилы в системе, но я не знаю, где в системе найти подходящий маркер, что она действительно установлена. Думал, что нечто подобное реализовано в скрипте NSIS для VLC. А вот это:
EnumRegKey - перебирает ключи реестра в ветке HKLM "SOFTWARE\Mozilla"
Проверяет, какая версия, Mozilla »
не решает мою задачу. Для эксперимента, я у друга взял папку с установленной Мозилой и запустил ее у себя, так в "HKLM, SOFTWARE\Mozilla" ничего не записалось. Так что, это плохой маркер для обнаружения установленной Мозиоы, так как его там может просто не существовать. Буду искать что-то другое, более надежнее.

kotkovets
25-08-2010, 02:15
boss911
При инсталяции Mozilla ветка "HKLM, SOFTWARE\Mozilla" создается, тока проверил.
там же и версия и путь к Mozilla
А за скрипт спасибо! будет на чем тренироваться

boss911
25-08-2010, 04:57
При инсталяции 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