Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Begin2Fly
15-07-2017, 18:18
кстати как можно подняться на папку выше чем $EXEDIR ? и присвоить этот путь переменной »
http://nsis.sourceforge.net/Get_parent_directory
Разъясните. Перешел на 3.02 с 3.0, появилась небольшая проблема. Раньше после запуска инсталятора выводилось диалоговое окно выбора языка установки, сейчас его нет, но если установку производить на ОС с английским интерфейсом язык меняется и все отрабатывает согласно коду под англоязык. Это нововведения или необходимо доработать?
Теперь для появления диалогового окна необходимо дописывать следующее:
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
Привет
Вопрос по nsDialogs
Создаю страничку с чекбоксом, как добавить чекбокс разобрался, теперь нужно обеспечить взаимодействие с флажком. Например, хотелось бы, чтобы кнопка "Далее" становилась активна только когда пользователь поставит флажок в чекбоксе. Может есть примеры с такой функцией? Спасибо!
Например, хотелось бы, чтобы кнопка "Далее" становилась активна только когда пользователь поставит флажок в чекбоксе. Может есть примеры с такой функцией? »
Посмотрите в разделе NsDialogs FAQ (http://nsis.sourceforge.net/NsDialogs_FAQ) на домашней страничке NSIS. В первом примере "How to Enable/Disable a control" (Как Включить/Отключить элемент управления) показан как раз ваш случай.
Там показана манипуляция с созданной кнопкой. А как сделать так же со стандартной кнопкой ("Далее")?
А как сделать так же со стандартной кнопкой ("Далее")? »
Вот так, например: :cool:
!include "nsDialogs.nsh"
!include "winmessages.nsh"
!include "logiclib.nsh"
OutFile "test.exe"
Page Custom pre
Page license
Page instfiles
var dialog
var hwnd
Function pre
nsDialogs::Create 1018
Pop $dialog
${NSD_CreateCheckbox} 0 0 50% 6% "Enable button Next"
Pop $hwnd
${NSD_OnClick} $hwnd EnDisableButton
GetDlgItem $0 $HWNDPARENT 1 # get handle next/install button
EnableWindow $0 0 # disable next/install button
nsDialogs::Show
FunctionEnd
Function EnDisableButton
Pop $hwnd
GetDlgItem $1 $HWNDPARENT 1
${NSD_GetState} $hwnd $0
${If} $0 == 1
EnableWindow $1 1
${Else}
EnableWindow $1 0
${EndIf}
FunctionEnd
Section ""
SectionEnd
Всем доброго времени суток. Подскажите, как в скрипте (для создания портативной программы) прописать для лаунчера запуск программы из разных папок
на 32 битной системе по пути App\papka32\proga.exe
на 64 битной системе по пути App\papka64\proga.exe
ZVSRus,
Наверное, как в справке и в сотне примеров в теме :
!include "x64.nsh"
!include "LogicLib.nsh"
${If} ${RunningX64}
ExecWait "путь\App\papka64\proga.exe"
${Else}
ExecWait "путь\App\papka32\proga.exe"
${EndIf}
MKN,
Спасибо, я в данной теме пару дней.
И последний штрих, поможете прикрутить к данной функции ваш код (ненужное за комментировать)
Function Launch
SetOutPath "$EXEDIR\${APPDIR}"
${GetParameters} $0
ExecWait `"$EXEDIR\${APPDIR}\${APPEXE}"${APPSWITCH} $0`
!include "x64.nsh"
!include "LogicLib.nsh"
${If} ${RunningX64}
ExecWait "путь\App\papka64\proga.exe"
${Else}
ExecWait "путь\App\papka32\proga.exe"
${EndIf}
ReadEnvStr $0 USERNAME
WriteINIStr "$EXEDIR\Data\${APP}Portable.ini" "${APP}Portable" "UserName" "$0"
WriteINIStr "$EXEDIR\Data\${APP}Portable.ini" "${APP}Portable" "GoodExit" "true"
FunctionEnd
Подскажите, уважаемые, кто делал такую штуку или знает как сделать.... У меня в фоне работает консольная утилита. Иногда ее надо срочно закрыть. Нужна на экран плавающая кнопка стоп (цветная, с иконкой, 20х20 мм), нажав на которую можно закрыть (убить) процесс. Запускает консольную утилиту ЕХЕ_шник на NSIS (процесс без окна) и ждет ее завершения. Кнопку можно запаковать в отдельный ЕХЕ файл. Я очень давно собирал инсталляторы и навык потерял.... :sorry:
Salmo, не надо извращений в виде плавающих по экрану кнопок. Скрипт AutoIt/AutoHotKey из нескольких строк, закрывающий указанный процесс по имени исполняемого файла по нажатию комбинации горячих клавиш.
Нужна на экран плавающая кнопка стоп »
Как вариант, (комплект - код с примером и нужными плагинами) - см. прикреплённый файл
На примере убиения процесса виндового калькулятора (используется плагин nsProcess).
(Кнопка с фейсом поверх окон, можно перетаскивать, с маленькой кнопочкой для закрытия, с иконкой на кнопке 32x32)
Ессно размеры и пр косметику можно изменять по вкусу...
http://s019.radikal.ru/i618/1711/bf/93fcb6ed7eae.jpg
Всем доброго времени суток!
Подскажите какая константа соответствует дате и времени суток?
Если точнее, как прописать в ini файл дату и время компиляции?
как прописать в ini файл дату и время компиляции? »
Как вариант-пример записи в уже имеющийся файл myinifile.ini :
(если файла нет - ессно сначала создать)
!define /date MyTIMESTAMP "%Y-%m-%d-%H-%M-%S"
OutFile "Test-${MyTIMESTAMP}.exe"
;http://nsis.sourceforge.net/mediawiki/index.php?title=Reference/WriteINIStr
Section
WriteINIStr $EXEDIR\myinifile.ini section1 myinifile ${MyTIMESTAMP}
WriteINIStr $EXEDIR\myinifile.ini section1 myinifileelse "ещё запись в section1"
WriteINIStr $EXEDIR\myinifile.ini section2 nsis ${MyTIMESTAMP}
SectionEnd
Добрый вечер!
Подскажите в чем проблема?
Name "test"
OutFile "Test.exe"
RequestExecutionLevel user
InstallDir "$APPDATA\1"
Icon "icon.ico"
SilentInstall silent
Section
SetOutPath $INSTDIR
File "test.txt"
Exec '"$INSTDIR\test.txt"'
SectionEnd
Компиляция проходит успешно.Файлы распакуются в директорию appdata, нужно открыть файл txt. Ничего не выходит. Пробовал через "FileOpen" Такая же фигня.
gamma,
Используй ExecShell
Например :
ExecShell "" "$EXEDIR\test.txt"
Мужики, помогите разобраться... Второй день вожусь. Сделал две кастомные странички, на первой есть чекбокс выбора создания ярлыка в меню Пуск, на второй кнопка выбора папки в меню Пуск. Не могу заставить вторую страницу считывать состояние отметки чекбокса и в зависимости от отметки активировать/деактивировать кнопку...
!define PRODUCT_NAME "MyProg"
!define PRODUCT_VERSION "1.0"
SetCompressor lzma
!include "MUI2.nsh"
!include "nsDialogs.nsh"
Var CustPage1
Var DirRequest_Txt
Var DirRequest_Btn
var CustPage2
Var Check
var CheckBox1
!insertmacro MUI_PAGE_WELCOME
Page custom fnCustPage1
Page custom fnCustPage2
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\MyProg"
ShowInstDetails show
ShowUnInstDetails show
;======================-Первая страница-=========================;
Function fnCustPage1
nsDialogs::Create 1018
Pop $CustPage1
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateCheckBox} 10u 90u 100u 12u "Ярлык в меню «Пуск»"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
;${NSD_OnClick} $CheckBox1 fnCheckBox ; Такой вариант не работает
nsDialogs::Show
FunctionEnd
;======================-Вторая страница-=========================;
Function fnCustPage2
nsDialogs::Create 1018
Pop $CustPage2
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateText} 10.09u 86.38u 224.53u 13.31u "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
Pop $DirRequest_Txt
${NSD_CreateButton} 240.94u 86.38u 50.49u 13.31u "Обзор..."
Pop $DirRequest_Btn
${NSD_OnClick} $DirRequest_Btn fnc_DirRequest_Click
;Call fnCheckBox ; Такой вариант тоже не работает
nsDialogs::Show
FunctionEnd
;===========================================================;
Function fnCheckBox
Pop $CheckBox1
${NSD_GetState} $CheckBox1 $Check
${If} $Check = 1
EnableWindow $DirRequest_Txt 0
EnableWindow $DirRequest_Btn 0
${ElseIf} $Check = 0
EnableWindow $DirRequest_Txt 1
EnableWindow $DirRequest_Btn 1
${EndIf}
FunctionEnd
;===========================================================;
Function fnc_DirRequest_Click
Pop $R0
${If} $R0 == $DirRequest_Btn
${NSD_GetText} $DirRequest_Txt $R0
nsDialogs::SelectFolderDialog /NOUNLOAD "" "$R0"
Pop $R0
${If} "$R0" != "error"
${NSD_SetText} $DirRequest_Txt "$R0"
${EndIf}
${EndIf}
FunctionEnd
;===========================================================;
Section "" SEC01
SectionEnd
Alex S,
Навскидку, можно как то так (если я правильно понял суть...), но без активации/деактивации кнопки :
!define PRODUCT_NAME "MyProg"
!define PRODUCT_VERSION "1.0"
;SetCompressor lzma
!include "MUI2.nsh"
!include "nsDialogs.nsh"
Var CustPage1
Var DirRequest_Txt
Var DirRequest_Btn
var CustPage2
var CheckBox1
!insertmacro MUI_PAGE_WELCOME
Page custom fnCustPage1
Page custom fnCustPage2
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Test_setup.exe"
InstallDir "$PROGRAMFILES\MyProg"
ShowInstDetails show
ShowUnInstDetails show
;======================-Первая страница-=========================;
Function fnCustPage1
nsDialogs::Create 1018
Pop $CustPage1
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateCheckBox} 10u 90u 100u 12u "Ярлык в меню «Пуск»"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
${NSD_OnClick} $CheckBox1 fnCheckBox
nsDialogs::Show
FunctionEnd
Function fnCheckBox
;Pop $CheckBox1
${NSD_GetState} $CheckBox1 $9
FunctionEnd
;======================-Вторая страница-=========================;
Function fnCustPage2
${If} $9 == "0"
nsDialogs::Create 1018
Pop $CustPage2
MessageBox MB_OK "выбираем путь для ярлыка"
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateText} 10.09u 86.38u 224.53u 13.31u "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
Pop $DirRequest_Txt
${NSD_CreateButton} 240.94u 86.38u 50.49u 13.31u "Обзор..."
Pop $DirRequest_Btn
${NSD_OnClick} $DirRequest_Btn fnc_DirRequest_Click
nsDialogs::Show
${Else}
MessageBox MB_OK "код для ярлыка в меню «Пуск»"
${EndIf}
FunctionEnd
;===========================================================;
Function fnc_DirRequest_Click
Pop $R0
${If} $R0 == $DirRequest_Btn
${NSD_GetText} $DirRequest_Txt $R0
nsDialogs::SelectFolderDialog /NOUNLOAD "" "$R0"
Pop $R0
${If} "$R0" != "error"
${NSD_SetText} $DirRequest_Txt "$R0"
${EndIf}
${EndIf}
FunctionEnd
;===========================================================;
Section "" SEC01
SectionEnd
Alex S,
Вот вам еще один пример. :)
!define PRODUCT_NAME "MyProg"
!define PRODUCT_VERSION "1.0"
SetCompressor lzma
!include "MUI2.nsh"
!include "nsDialogs.nsh"
Var CustPage1
Var DirRequest_Txt
Var DirRequest_Btn
Var DirApp
Var CustPage2
Var Check
var CheckBox1
!insertmacro MUI_PAGE_WELCOME
Page custom fnCustPage1 fnCheckBox
Page custom fnCustPage2 DirRequest
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
ShowInstDetails show
ShowUnInstDetails show
;======================-Первая страница-=========================;
Function fnCustPage1
nsDialogs::Create 1018
Pop $CustPage1
${If} $CustPage1 == error
Abort
${EndIf}
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateCheckBox} 10.09u 86.38u 100u 12u "Ярлык в меню «Пуск»"
Pop $CheckBox1
${NSD_Check} $CheckBox1
${If} $Check == ${BST_UNCHECKED}
${NSD_UnCheck} $CheckBox1
${EndIf}
nsDialogs::Show
FunctionEnd
;======================-Вторая страница-=========================;
Function fnCustPage2
nsDialogs::Create 1018
Pop $CustPage2
${If} $CustPage2 == error
Abort
${EndIf}
!insertmacro MUI_HEADER_TEXT "..." "..."
${NSD_CreateText} 10.09u 86.38u 224.53u 13.31u $SMPROGRAMS
Pop $DirRequest_Txt
${NSD_CreateButton} 240.94u 86.38u 50.49u 13.31u "Обзор..."
Pop $DirRequest_Btn
${NSD_OnClick} $DirRequest_Btn fnc_DirRequest_Click
${If} $Check == ${BST_UNCHECKED}
EnableWindow $DirRequest_Txt 0
EnableWindow $DirRequest_Btn 0
${EndIf}
nsDialogs::Show
FunctionEnd
;===========================================================;
Function fnCheckBox
${NSD_GetState} $CheckBox1 $Check
FunctionEnd
;===========================================================;
Function fnc_DirRequest_Click
${NSD_GetText} $DirRequest_Txt $DirApp
nsDialogs::SelectFolderDialog "Выберите папку или создайте новую:" $DirApp
Pop $DirApp
${If} $DirApp != error
${NSD_SetText} $DirRequest_Txt $DirApp
${EndIf}
FunctionEnd
;===========================================================;
Function DirRequest
${NSD_GetText} $DirRequest_Txt $DirApp
FunctionEnd
;===========================================================;
Section "" SEC01
SectionEnd
Всем привет! Помогите, пожалуйста мне с такой проблемой: есть установщик состоящий из двух страниц - MUI_PAGE_WELCOME и MUI_PAGE_INSTFILES, и нужно чтобы этот установщик, при запуске с определённым ключом, сразу же показывал страницу MUI_PAGE_INSTFILES, начинал установку, и закрывался после завершения. То есть как бы Silent-режим, не требующий никаких действий от пользователя, но с отображением прогресса. Заранее спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.