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

yyv
16-10-2012, 13:50
пытаюсь менять тексты в стандартных котролах на страничке установки
кнопки и верхний тайтл заменил нормально

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 "МОЙ" "ацкий текст"
в справку стандартную загляньте (Перевод – Поляков А.В), полностью на русском!

yyv
16-10-2012, 17:19
ваш вариант также не работает...
Я возможно плохо объяснил...
на картинке красным выделил тот текст который хотел бы изменить...
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}
справку почитайте - Определение ОС

yyv
17-10-2012, 18:20
Все работает... и прекрасно... и вписывать нужно до использования плагина...
и после использования изменить... »
пробую использовать этот код в секции

!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, и что мне Вам дать готовый код?
я вам показал как! на пальцах.. и разжевал еще...
---
религия, что ли не позволяет внимательно справку читать или думать?

MKN
19-10-2012, 16:01
Товарищи! Подскажите, как решить простую вроде бы задачу :
Необходимо, чтобы после запуска скрипта-инсталлятора, фокус был на кнопке, находящейся на кастомной странице.

Т.е. запустили инсталлятор, кликнули на клавиатуре 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