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
20-03-2010, 22:57
K.A.V просматривал я всю ветку темы, однако сам не смог разобраться, по этому просил помочь.

K.A.V.
21-03-2010, 04:40
Разобраться в чем? Не у меете читать по-русски? Или просто лень читать все посты?
Пост #307 (http://forum.oszone.net/post-1326443-307.html)

kotkovets
21-03-2010, 13:47
Как реализовать выбор одного компонента одним нажатием исключающие выбор двух других компонентов в одной группе? на примере поста #307 выбор получается двойным нажатием...

hb860
28-03-2010, 20:54
В рамках учебника:
Создание своего инсталлятора на NSIS. Определяем системный диск (http://www.winreview.ru/comment.php?comment.news.351.Sozdanie-svoego-installyatora-na-NSIS.-Operedelyaem-sistemnij-disk)

hb860
29-03-2010, 08:22
Имеется две папки, например, папка х86 и папка х64. В каждой папке будет по одному MSI файлу, например, в папке х86, будет файл Run_х86.msi и в папке х64, будет файл Run_х64.msi. Так вот сама задача, необходимо, чтоб, на 32-х битной системе, устанавливался и распаковывался, только файл Run_х86.msi, а на 64-х битной системе, устанавливались и распаковывались, как файл Run_х86.msi, так и файл Run_х64.msi.
Распаковка обеих папки будет производиться в $TEMP.

Если вам не сложно, то можно написать пример скрипта.
Прочитайте, пожалуйста, это:
Создание своего инсталлятора на NSIS. Один инсталлятор для x86 и х64 систем сразу (http://www.winreview.ru/comment.php?comment.news.352.11.Sozdanie-svoego-installyatora-na-NSIS.-Odin-installyator-dlya-x86-i-h64-sistem-srazu)

Там есть пример скрипта. Вам надо его доработать во так
Section
SetOutPath "$TEMP"
File "d:\исходные файлы\Run_х86.msi"
ExecWait "команда установки MSI пакета Run_х86.msi"
${If} ${RunningX64}
File "d:\исходные файлы\Run_х64.msi"
ExecWait "команда установки MSI пакета Run_х64.msi"
${EndIf}
......
продолжение скрипта

На будущее, давайте писать-таки вопросы не мне в приват, а в эту ветку. Ваши вопросы и ответы могут оказаться полезными для других участников!

Krinkels
09-04-2010, 10:47
Доброго времени суток, друзья. Не подскажете как сделать чтоб отображались проценты распакованных файлов. Вот скрин http://img15.imageshack.us/img15/9343/39265791.th.png (http://img15.imageshack.us/i/39265791.png/)

Krinkels
09-04-2010, 20:08
Вопрос снимается, разобрался сам. Все дело было в строчке SetCompressor /FINAL /SOLID lzma

K.A.V.
10-04-2010, 13:36
Как реализовать выбор одного компонента одним нажатием исключающие выбор двух других компонентов в одной группе? на примере поста #307 выбор получается двойным нажатием... »
Я предлагаю - вы отказываетесь, если вам лень нажать пару раз - дело ваше, пишите собственный механизм и оглашайте его здесь
Для меня данная возможность не очень уж такая нужная, чтобы тратить время на разработку более лучшего механизма

kotkovets
14-04-2010, 14:13
Я предлагаю - вы отказываетесь, если вам лень нажать пару раз - дело ваше, пишите собственный механизм »

Решил сам вопрос вызовом модуля nsDialogs , с помощью вашего
Справочника NSIS (http://forum.oszone.net/thread-168287.html) .

Krinkels
15-04-2010, 11:06
Друзья, помогите решить таков вопрос. Проверить версию установленной программы, и если ее версия больше устанавливаемой то выдать сообщение "Установка на более новую версию запрещена".

K.A.V.
15-04-2010, 13:37
В начале кода:
!include "VersionCheck.nsh"

Сама проверка версии:
ReadRegStr $0 HKLM "SOFTWARE\MySoft\MyProgram" "Version"
${VersionCheck} "2.0.0.0" "$0" "$1"
StrCmp $1 "2" 0 okVer
MessageBox MB_OK|MB_ICONSTOP "Установка на более новую версию запрещена"
quit
okVer:

2.0.0.0 замените на версию, которую в данный момент устанавливаете (можно например заменить переменной ${PRODUCT_VERSION})
Ну и измените путь к параметру в реестре, который содержит версию установленной программы

P.S.
Перед компиляцией прикреплённый файл необходимо распаковать в директорию "Include" (\Program Files\NSIS\Include)

Krinkels
15-04-2010, 14:24
K.A.V.
Вот спасибо, выручил.

SamLab
15-04-2010, 17:38
Кто подскажет как зарегистрировать библиотеки под Win7 x64 - RegDLL только в x86 работает?

K.A.V.
15-04-2010, 18:59
RegDLL только в x86 работает? »
Это вопрос или утверждение? :)
Пробовали RegDLL?
Пробовали простым обращением к $SYSDIR\regsvr32.exe? (как в Win 7 не в курсе)
Пробовали RequestExecutionLevel admin? (ну мало ли, этот UAC ;))

И вот ещё (взял отсюда (http://nsis.sourceforge.net/FileZilla)) попробуйте:
!define LIBRARY_X64
${If} ${RunningX64}
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED "dll_64.dll" $INSTDIR\dll_64.dll "$INSTDIR"
${Else}
!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "dll_64.dll" $INSTDIR\dll_64.dll "$INSTDIR"
${Endif}
!undef LIBRARY_X64

Krinkels
15-04-2010, 21:20
Друзья, помогите добавить в этот скрипт выбор установки ярлыков (Для всех пользователей; Для текущего)
!define PRODUCT_NAME "My Prog"

!include "MUI2.nsh"

!insertmacro MUI_PAGE_WELCOME

!insertmacro MUI_PAGE_DIRECTORY
Page custom Select Selected
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "My Prog"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\My Prog"

Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\Setting.ini "Setting.ini"
FunctionEnd

Function Select
InstallOptions::dialog "$PLUGINSDIR\Setting.ini"
Pop $0
InstallOptions::show
Pop $0
FunctionEnd

Var Chk1
Var Chk2
Var Chk3

Function Selected
ReadINIStr $0 "$PLUGINSDIR\Setting.ini" "Settings" "State"
StrCmp $0 0 done
StrCmp $0 2 Desctop
StrCmp $0 3 Shortcut
StrCmp $0 4 Pusk
Abort

Desctop:
ReadINIStr $Chk1 "$PLUGINSDIR\Setting.ini" "Field 2" "State"
Abort

Shortcut:
ReadINIStr $Chk2 "$PLUGINSDIR\Setting.ini" "Field 3" "State"
Abort

Pusk:
ReadINIStr $Chk3 "$PLUGINSDIR\Setting.ini" "Field 4" "State"
Abort

done:
FunctionEnd

Section -Post
StrCmp $Chk1 "1" 0 No_Check_1
CreateShortCut "$DESKTOP\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_1:
StrCmp $Chk2 "1" 0 No_Check_2
CreateShortCut "$QUICKLAUNCH\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_2:
StrCmp $Chk3 "1" 0 No_Check_3
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\My Prog.lnk" "$INSTDIR\prog.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
No_Check_3:
SectionEnd [Settings]
NumFields=4

[Field 1]
Type=GroupBox
Left=0
Top=0
Right=300
Bottom=140
Text=Иконки

[Field 2]
Type=CheckBox
Flags=NOTIFY
Left=16
Top=16
Right=159
Bottom=28
Text=Иконка на рабочий стол

[Field 3]
Type=CheckBox
Flags=NOTIFY
Left=16
Top=32
Right=223
Bottom=45
Text=Иконка на панель быстрого запуска

[Field 4]
Type=CheckBox
Flags=NOTIFY
Left=16
Top=48
Right=191
Bottom=61
Text=Создать группу в меню "Пуск"

hb860
15-04-2010, 23:42
Пробовали простым обращением к $SYSDIR\regsvr32.exe? (как в Win 7 не в курсе) »
Есть там такое, никуда не делось
RegDLL только в x86 работает »
А в х64 разве не работает? Работает оно.
RequestExecutionLevel admin »
Не надо, UAC сам вылезет на сетаперИ вот ещё (взял отсюда) попробуйте: »
"Полезное сообщение"

K.A.V., было круто видеть ваши статьи у себя на сайте ;)

Krinkels, к чему ТАКОЙ изврат?
Почему бы секциями не сделать?

Компилить я этот код не буду, я вам напишу, что добавить.
Вверх:
Var Chk4
....
Function Selected
...
ReadINIStr $Chk4 "$PLUGINSDIR\Setting.ini" "Field 5" "State"
.....

Section -Post
StrCmp $Chk4 0 +2
SetShellVarContext all

....
Вниз:
[Field 5]
Type=CheckBox
Flags=NOTIFY
Left=16
Top=55
Right=191
Bottom=61
Text=Ярлыки для всех пользователей

Если это писали вы - я вам рекомендую подумать над стилем реализации ваших скриптов

Krinkels
16-04-2010, 08:28
hb860
к чему ТАКОЙ изврат?
Почему бы секциями не сделать? »
Да вид мне не нравиться. А через свою страничку можешь сделать что угодно и придать этому любой вид

Если это писали вы - я вам рекомендую подумать над стилем реализации ваших скриптов »
Да, это писал я. А чем тебе стиль не нравится? Вроде нормально написано.

K.A.V.
16-04-2010, 08:47
Krinkels
Заключайте пожалуйста команды/скрипты в тег CODE, неудобно читать пост

Вторая функция в InstallOptions используется только тогда (в вашем случае Selected), когда мы хотим выполнить какие-либо действия в режиме реального времени (например при отметки галочкой какого-либо пункта сделать другой элемент неактивным), в вашем же случае, вы просто читаете значения параметров, поэтому функция Selected вам не нужна, ну по крайней мере, зачем писать лишнее? ;)

Вот как будет выглядеть "правильнее"


!define PRODUCT_NAME "My Prog"

!include "MUI2.nsh"

!insertmacro MUI_PAGE_WELCOME

!insertmacro MUI_PAGE_DIRECTORY
Page custom Select
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "My Prog"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\My Prog"

Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\Setting.ini "Setting.ini"
FunctionEnd

Var Chk1
Var Chk2
Var Chk3

Function Select
InstallOptions::dialog "$PLUGINSDIR\Setting.ini"
Pop $0
InstallOptions::show

ReadINIStr $Chk1 "$PLUGINSDIR\Setting.ini" "Field 2" "State"
ReadINIStr $Chk2 "$PLUGINSDIR\Setting.ini" "Field 3" "State"
ReadINIStr $Chk3 "$PLUGINSDIR\Setting.ini" "Field 4" "State"

StrCmp $Chk1 "1" 0 No_Check_1
CreateShortCut "$DESKTOP\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_1:
StrCmp $Chk2 "1" 0 No_Check_2
CreateShortCut "$QUICKLAUNCH\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_2:
StrCmp $Chk3 "1" 0 No_Check_3
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\My Prog.lnk" "$INSTDIR\prog.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
No_Check_3:
FunctionEnd

Krinkels
16-04-2010, 09:13
K.A.V.,
Заключайте пожалуйста команды/скрипты в тег CODE, неудобно читать пост »
Без проблем.

Вторая функция в InstallOptions используется только тогда (в вашем случае Selected), когда мы хотим выполнить какие-либо действия в режиме реального времени (например при отметки галочкой какого-либо пункта сделать другой элемент неактивным), в вашем же случае, вы просто читаете значения параметров, поэтому функция Selected вам не нужна, ну по крайней мере, зачем писать лишнее?
Вот как будет выглядеть "правильнее" »
У меня ярлыки создаются во время установки, а в приведенном тобой исправленном скрипте они создаются в реальном времени. А это жутко не удобно. Изначально мой скрипт создание ярлыков выглядел примерно так же, но я от него отказался :)

K.A.V.
16-04-2010, 12:01
У меня ярлыки создаются во время установки, а в приведенном тобой исправленном скрипте они создаются в реальном времени »
Ну так а в чем проблема перекинуть
StrCmp $Chk1 "1" 0 No_Check_1
CreateShortCut "$DESKTOP\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_1:
StrCmp $Chk2 "1" 0 No_Check_2
CreateShortCut "$QUICKLAUNCH\My Prog.lnk" "$INSTDIR\prog.exe"

No_Check_2:
StrCmp $Chk3 "1" 0 No_Check_3
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\My Prog.lnk" "$INSTDIR\prog.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
No_Check_3:

в секцию "-Post"? (как у вас было)
Значения то мы прочитали...я просто дал вам пример того, что вторая функция "Selected" вовсе не нужна...Ну вообщем делайте как считаете нужным ;)




© OSzone.net 2001-2012