Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
20-03-2010, 22:57
K.A.V просматривал я всю ветку темы, однако сам не смог разобраться, по этому просил помочь.
Разобраться в чем? Не у меете читать по-русски? Или просто лень читать все посты?
Пост #307 (http://forum.oszone.net/post-1326443-307.html)
kotkovets
21-03-2010, 13:47
Как реализовать выбор одного компонента одним нажатием исключающие выбор двух других компонентов в одной группе? на примере поста #307 выбор получается двойным нажатием...
В рамках учебника:
Создание своего инсталлятора на NSIS. Определяем системный диск (http://www.winreview.ru/comment.php?comment.news.351.Sozdanie-svoego-installyatora-na-NSIS.-Operedelyaem-sistemnij-disk)
Имеется две папки, например, папка х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
Как реализовать выбор одного компонента одним нажатием исключающие выбор двух других компонентов в одной группе? на примере поста #307 выбор получается двойным нажатием... »
Я предлагаю - вы отказываетесь, если вам лень нажать пару раз - дело ваше, пишите собственный механизм и оглашайте его здесь
Для меня данная возможность не очень уж такая нужная, чтобы тратить время на разработку более лучшего механизма
kotkovets
14-04-2010, 14:13
Я предлагаю - вы отказываетесь, если вам лень нажать пару раз - дело ваше, пишите собственный механизм »
Решил сам вопрос вызовом модуля nsDialogs , с помощью вашего
Справочника NSIS (http://forum.oszone.net/thread-168287.html) .
Krinkels
15-04-2010, 11:06
Друзья, помогите решить таков вопрос. Проверить версию установленной программы, и если ее версия больше устанавливаемой то выдать сообщение "Установка на более новую версию запрещена".
В начале кода:
!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.
Вот спасибо, выручил.
Кто подскажет как зарегистрировать библиотеки под Win7 x64 - RegDLL только в x86 работает?
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=Создать группу в меню "Пуск"
Пробовали простым обращением к $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
к чему ТАКОЙ изврат?
Почему бы секциями не сделать? »
Да вид мне не нравиться. А через свою страничку можешь сделать что угодно и придать этому любой вид
Если это писали вы - я вам рекомендую подумать над стилем реализации ваших скриптов »
Да, это писал я. А чем тебе стиль не нравится? Вроде нормально написано.
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 вам не нужна, ну по крайней мере, зачем писать лишнее?
Вот как будет выглядеть "правильнее" »
У меня ярлыки создаются во время установки, а в приведенном тобой исправленном скрипте они создаются в реальном времени. А это жутко не удобно. Изначально мой скрипт создание ярлыков выглядел примерно так же, но я от него отказался :)
У меня ярлыки создаются во время установки, а в приведенном тобой исправленном скрипте они создаются в реальном времени »
Ну так а в чем проблема перекинуть
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC