Показать полную графическую версию : [архив].: NSIS - все вопросы :.
пытаюсь менять тексты в стандартных котролах на страничке установки
кнопки и верхний тайтл заменил нормально
GetDlgItem $R2 $HWNDPARENT 1037
SendMessage $R2 ${WM_SETTEXT} 1 "STR:Download and Install process"
GetDlgItem $R2 $HWNDPARENT 1038
SendMessage $R2 ${WM_SETTEXT} 1 "STR:Please wait while ${PRODUCT_NAME} is downloaded and installed"
пытаюсь также изменить текст над прогресбаром
и тут ничего не получается
ни этот вариант
GetDlgItem $R2 $HWNDPARENT 1006
SendMessage $R2 ${WM_SETTEXT} 0 "STR:Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
ни этот не работают
FindWindow $R2 "#32770" "" $HWNDPARENT
GetDlgItem $R3 $R2 1006
SendMessage $R3 ${WM_SETTEXT} 0 "STR:Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
Я так понимаю что это из-за того что прогресбар находиться на другом диалоге (106)
подскажите, есть ли возможность изменить этот текст?
kotkovets
16-10-2012, 15:57
yyv, Зачем блин вся это возня ?
все стандартно в секциях:
SetDetailsPrint both
DetailPrint "Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
заголовки:
!insertmacro MUI_HEADER_TEXT "МОЙ" "ацкий текст"
в справку стандартную загляньте (Перевод – Поляков А.В), полностью на русском!
ваш вариант также не работает...
Я возможно плохо объяснил...
на картинке красным выделил тот текст который хотел бы изменить...
http://pix.toile-libre.org/upload/img/1350393451.png (http://pix.toile-libre.org/?img=1350393451.png)
Инсталер не показывает деталей
показывается процесс скачивания файла и окно прячется
вот собственно эту надпись -и хотелось бы изменить
про заголовок.. Я как то даже не подумал что в секциях я могу его менять также как на кастомных страничках :)
kotkovets
16-10-2012, 19:25
ваш вариант также не работает...
Я возможно плохо объяснил... »
Все работает... и прекрасно... и вписывать нужно до использования плагина...
и после использования изменить...
причем SetDetailsPrint имеет три свойства...
!include "MUI2.nsh"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
ShowInstDetails nevershow
OutFile Details.exe
Section
SetDetailsPrint textonly
DetailPrint text
sleep 1000
DetailPrint text_text
sleep 1000
DetailPrint text_text_text
sleep 500
SectionEnd
CyberMaster
17-10-2012, 17:55
Как определить разрядность ОС? И в зависимости от разрядности (x32 или x64) записывать тот или иной ключ реестра?
kotkovets
17-10-2012, 18:11
Как определить разрядность ОС? »
!include "x64.nsh"
;----
;----
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
${Else}
MessageBox MB_OK "running on x32"
${EndIf}
справку почитайте - Определение ОС
Все работает... и прекрасно... и вписывать нужно до использования плагина...
и после использования изменить... »
пробую использовать этот код в секции
!insertmacro MUI_HEADER_TEXT "Download and Install process" "Please wait while ${PRODUCT_NAME} is downloaded and installed"
SetDetailsPrint textonly
DetailPrint "Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
!ifndef EMB_PROGRAMS
!ifdef ORG_INSTALLER
DetailPrint "Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
NSISdl::download "${ORG_INSTALLER}" "$TEMP\${INSTALLER}"
DetailPrint "Downloading ${PRODUCT_NAME} ${ORG_INSTALLER}"
Pop $R0 ;Get the return value
HideWindow
StrCmp $R0 "success" seguir
StrCmp $R0 "cancel" canceled
strcpy $DownloadFailed "1"
goto error
seguir:
!endif
!endif
и текст не меняется... Постоянно висит донлоадинг инсталер.рар
мне же нужно изменить именно этот текст...
те это я так понимаю текст который выводит плагин...
CyberMaster
17-10-2012, 19:59
Почитал справочник по NSIS, нашел там логическую конструкцию определения ключа реестра и необходимую библиотеку для этого (за нее отдельный респект), но как быть если нужно определить существует ли параметр в реестре, а не ключ?
${If} ${RunningX64}
${If} ${KeyExists} "${HKLM}\SOFTWARE\Wow6432Node\NSIS" "VersionBuild"
keyexist
${Else}
keynotexist
${EndIf}
${Else}
....
....
${EndIf}
Так что-ли?
kotkovets
17-10-2012, 20:47
но как быть если нужно определить существует ли параметр в реестре, а не ключ? »
Элементарно, читаем в справке: Работа с реестром в NSIS -> ReadRegStr
и ... используем флаг ошибки... все расписано давно...
Если прочитать данные невозможно, то в переменную user_var будет записано пустое значение - будет установлен флаг ошибки.
clearerrors
readregstr $0 HKLM "Software\Microsoft\Windows\CurrentVersion" "_ProgramFilesDir"
iferrors 0 +2
MessageBox MB_OK "erorr" IDOK
те это я так понимаю текст который выводит плагин... »
да
CrashTest
17-10-2012, 23:36
Добрый вечер!
Однажды я видел в одном установщике функцию, при нажатии кнопки Отмены происходила удаление всех записей, ярлыков, файлов которые уже успели скопироваться из установщика.
Так вот я хочу реализовать это в nsis. Возможно ли это?
http://nsis.sourceforge.net/InstFiles_Cancel_-_Allowing_a_user_to_cancel_installation_during_InstFiles
http://nsis.sourceforge.net/Uninstall_only_installed_files
Вот что я нашел. Но особо ничего не понял. Может быть вы мне поможете? Спасибо.
kotkovets
18-10-2012, 00:08
CrashTest, в чем собственно то проблема, открываем справочник и читаем:
Интерфейс Modern UI -> Стандартные функции
!include "MUI2.nsh"
!define MUI_ABORTWARNING
!define MUI_CUSTOMFUNCTION_ABORT Abort
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesShow
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "Программы"
OutFile test.exe
Function Abort
;в этой функции пишем нужные команды
MessageBox MB_OK "Установка отменена!"
FunctionEnd
Function InstFilesShow
GetDlgItem $0 $HWNDPARENT 2
EnableWindow $0 1
FunctionEnd
Section
Sleep 3000
SectionEnd
CrashTest
18-10-2012, 16:41
kotkovets, как я понимаю, в вашей функции команда Abort будет выполняться везде где только можно. а мне нужно только на странице установки файлов. и удалять только те файлы которые успели копироваться. а так она будет выполняться когда пользователь выходит из установщика, а мне надо когда пользователь прерывал установку. кнопка отмены вообще не активна.
kotkovets
18-10-2012, 17:10
CrashTest, и что мне Вам дать готовый код?
я вам показал как! на пальцах.. и разжевал еще...
---
религия, что ли не позволяет внимательно справку читать или думать?
Товарищи! Подскажите, как решить простую вроде бы задачу :
Необходимо, чтобы после запуска скрипта-инсталлятора, фокус был на кнопке, находящейся на кастомной странице.
Т.е. запустили инсталлятор, кликнули на клавиатуре ENTER и кнопка сработала.
(Но, с приведённым ниже кодом, вместо этого происходит переход на PAGE_INSTFILES )
!include "MUI2.nsh"
Page custom FocusTest
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "FocusTest."
OutFile "FocusTest.exe"
Var dlg
Var Button1
Function FocusTest
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateButton} 25u 40u 250u 13u "На этой кнопке должен быть фокус после запуска инсталлятора"
Pop $Button1
;так не работает :
${NSD_SetFocus} $Button1
;и так тоже не работает :
;System::Call "user32::SetFocus(iButton1)"
${NSD_OnClick} $Button1 Install
nsDialogs::Show
FunctionEnd
Function Install
Pop $Button1
MessageBox MB_OK " Нажали кнопку"
;SendMessage $HWNDPARENT 0x408 1 0
FunctionEnd
Section
SetAutoClose true
SectionEnd
Или всё же в коде ошибка ?
CrashTest
19-10-2012, 19:12
Что лучше WinVer2.nsh или x64.nsh для автовыбора разрядности системы? Я пользуюсь двумя, но мне кажется можно обойтись только WinVer2.nsh. Что посоветуете?
kotkovets
19-10-2012, 20:38
Что лучше WinVer2.nsh или x64.nsh для автовыбора разрядности системы? »
смотря какие задачи решать...
меряться п..ками неуместно..:)
CrashTest
20-10-2012, 00:47
InstallDir "$PROGRAMFILES/${PRODUCT_NAME}"
***
Function .onInit
${WinPlatformArchitecture} $R1
${If} $R1 == 64
StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}"
${EndIf}
FunctionEnd
^ - теперь на 64 разрядных системах папка по у молчанию показывается нормально, а не program files (86)
Добавляю следующий код:
${If} $Radio2_State == 1
StrCpy $INSTDIR "Выберите папку"
${ENDif}
то это не срабатывает? хочу чтобы переменная на втором выборе была изменена. в первом коде ведь работает.
kotkovets
20-10-2012, 00:59
по у молчанию показывается нормально, а не program files (86) »
Достаточно написать это, вне секции и функции и все!
InstallDir $PROGRAMFILES64
StrCpy $INSTDIR "Выберите папку" »
что это? :o
условие сработает, если $Radio2_State == 1, если оно не равно - досвидос! :)
неужели блин трудно, перед логикой, проверить значение переменной
одной командой... для отладки...
MessageBox MB_OK "$$Radio2_State = $Radio2_State"
CrashTest
20-10-2012, 01:07
Достаточно »
действительно. просто прочитал
Каталог программных файлов (program files). Обычно это C:\Program Files, но
определяется во время выполнения
и подумал установщик сам должен решать.
помогите мне еще автоматом закрывать деинсталлятор когда он отработал
Function un.onUninstSuccess
HideWindow
MessageBox MB_OK "Удаление успешно завершено!"
FunctionEnd
чето нифига
kotkovets
20-10-2012, 01:31
и подумал установщик сам должен решать. »
он сам и решает - $PROGRAMFILES64
В 32-разрядной нет папки - program files (86) ..
чето нифига »
в секции удаления последней командой:
Section Uninstall
;---
SetAutoClose true
SectionEnd
при условии, что далее страничек нет:
Function un.onUninstSuccess
HideWindow
MessageBox MB_OK "Удаление успешно завершено!"
;Quit
FunctionEnd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC