PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 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

linkuha@vk
31-01-2013, 22:33
извините, может тупой вопрос, но все же:

используя ShowInstDetails hide, остается только кнопка "Показать детали", нажав на кнопку, открывается список деталей установки.
каким способом можно сделать, чтобы была кнопка "Скрыть детали", убирала отчет и опять появляласть кнопка "Показать детали"?

kotkovets
31-01-2013, 22:36
каким способом можно сделать, чтобы была кнопка "Скрыть детали", убирала отчет и опять появляласть кнопка "Показать детали"? »
это сделано стандартно..
скорее просто так и не сделаешь..

Lex_from_Belarus
01-02-2013, 01:09
Добрый вечер, подскажите пожалуйста. Есть программа к которой сделан патч, при установке патча путь берётся из реестра, но программа к которой устанавливается патч прописывается в разных месте в 32 битной винде в одном месте, а в 64 битной в другом. Как лучше реализовать чтение из реестра в InstallDirRegKey ?

K.A.V.
01-02-2013, 05:32
Как лучше реализовать чтение из реестра в InstallDirRegKey ? »
Можете просто менять значение переменной $INSTDIR при запуске инсталлятора

Вот, например, таким способом...
Читаем значение из первой ветки (типа 32 бит система) и, если в параметре путь в папку программы и есть файл "проверка файла.exe" в директории, то назначаем переменной $INSTDIR значение ключа реестра
Если файл не существует, читаем из другой ветки в реестре (типа 64 бит система) и по той же схеме
А если при чтении из второго ключа программа установки не найдёт указанный вами файл, то будет ошибка установки (можете сами убрать потом)

Function .onInit
ReadRegStr $0 HKLM "Software\32 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
ReadRegStr $0 HKLM "Software\64 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
MessageBox MB_OK|MB_ICONSTOP "Программа не установлена"
quit
ok:
FunctionEnd

ASiRU
01-02-2013, 14:09
Помогите плиз, сложилась такая ситуация:
Есть готовый SFX архив который отлично работает, переспросил не случайно ли нажали и запускает INSTAL.BAT который уже сам дальше занимается установкой и настройкой приложения.
Однако поменялись условия и теперь нужно два варианта настройки данного приложения,
получилось 2 батника каждый настраевает по своему.
Нужно менять диалог например "будем ставить дополнительные примочки?", да - запускаем install1.bat, нет - запускаем install2.bat или отмена если случайно нажали.
SFX такое может реализовать только ключами к запуску - не подходит (шибко "умные" пользователи)
Можно реализовать еще одним батником - но это не красиво выглядит, менюха из cmd корявенько выглядит
Нужно переключаться на полновесные инсталяторы, а я в этом нуб нубом.
Хотелось бы: инсталер распаковывает в указанный темп файлы, предложить окно выбора 1 ставим так, 2 ставим так, 3 выход, пульнуть запуск соотвецтвующего батника и погаснуть, дальше все будет отрабатывать батник.
Если это не сильно сложно может кто нибудь написать скрипт на такой прикол?
или посоветуйте чем такое можно собрать самому?

alert30
01-02-2013, 14:26
ASiRU, теперь дублируете вопрос после создания темы (http://forum.oszone.net/thread-252834.html)?

ASiRU
01-02-2013, 14:35
Вопрос совсем изменен, тут если возможно прошу скрипт для NSIS, ответ из темы не подходит по описанным выше причинам, от SFX приходится отказываться. Ту тему попрошу закрыть.

profcom
01-02-2013, 15:33
Вопрос совсем изменен, тут если возможно прошу скрипт для NSIS, ответ из темы не подходит по описанным выше причинам, от SFX приходится отказываться. Ту тему попрошу закрыть. »
Самый простой способ отказаться от батников и написать все на nsis. Не очень это сложно посмотрев на примеры и почитав справку. Дальше пробуешь сам писать, а тут люди помогут с тем что не будет получаться.

Кстати в sfx можно то же использовать два варианта установки без ключей. Простая установка и установка с зажатым Shift.

profcom
01-02-2013, 16:01
Если это не сильно сложно может кто нибудь написать скрипт на такой прикол? »
Вот примерчик, а дальше делать можно как душе угодно.
!include MUI2.nsh
!include nsDialogs.nsh

Name "Варианты"
OutFile "Test.exe"
Caption "Установка моей программы"

!insertmacro MUI_LANGUAGE "Russian"
Page custom FuncLive FuncPost

Var Dialog
Var GroupBox1
Var RadioButton1
Var RadioButton2

Function FuncLive
nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog
!insertmacro MUI_HEADER_TEXT "Варианты установки" "Выберите вариант установки"

${NSD_CreateGroupBox} 69u 25u 131u 56u "Варианты установки"
Pop $GroupBox1

${NSD_CreateRadioButton} 73u 35u 68u 14u "Вариант 1"
Pop $RadioButton1

${NSD_CreateRadioButton} 73u 52u 68u 14u "Вариант 2"
Pop $RadioButton2

nsDialogs::Show $Dialog
FunctionEnd

Function FuncPost
${NSD_GetState} $RadioButton1 $0
${If} $0 == ${BST_CHECKED}
; выполняю первый батник если он был отмечен
MessageBox MB_OK "Сейчас будет выполнен батник 1"
nsExec::Exec '"$EXEDIR\bat1.bat"'
${EndIf}

${NSD_GetState} $RadioButton2 $0
${If} $0 == ${BST_CHECKED}
; выполняю второй батник если он был отмечен
MessageBox MB_OK "Сейчас будет выполнен батник 2"
nsExec::Exec '"$EXEDIR\bat2.bat"'
${EndIf}
FunctionEnd

Section
SectionEnd

MKN
01-02-2013, 16:51
ASiRU,
Попробуй : http://rghost.ru/43465395
рядом с Custom_BAT.exe (или Custom_BAT_hide.exe) должны находится два твоих BAT файла, с именами a.bat и b.bat
(ессно можно было использовать маску... ). Остальное ясно из фейса. На W7 запускать от имени админа.
Custom_BAT_hide.exe - для скрытого запуска батников ( запуск плагом nsExec )

Lex_from_Belarus
01-02-2013, 23:12
Можете просто менять значение переменной $INSTDIR при запуске инсталлятора
Вот, например, таким способом...
Читаем значение из первой ветки (типа 32 бит система) и, если в параметре путь в папку программы и есть файл "проверка файла.exe" в директории, то назначаем переменной $INSTDIR значение ключа реестра
Если файл не существует, читаем из другой ветки в реестре (типа 64 бит система) и по той же схеме
А если при чтении из второго ключа программа установки не найдёт указанный вами файл, то будет ошибка установки (можете сами убрать потом)
Код:
Function .onInit
ReadRegStr $0 HKLM "Software\32 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
ReadRegStr $0 HKLM "Software\64 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
MessageBox MB_OK|MB_ICONSTOP "Программа не установлена"
quit
ok:
FunctionEnd »
а что сделать чтобы не кошко с ошибкой выскакивало а просто задавался какой-нибудь стандартный путь, это например надо в случае если програ портативная, т.е. не устанавливалась?

K.A.V.
02-02-2013, 09:12
а что сделать чтобы »
Нужно начать читать наш справочник и знакомиться с NSIS, вам здесь не будут постоянно готовые коды писать, по крайней мере я

Function .onInit
ReadRegStr $0 HKLM "Software\32 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
ReadRegStr $0 HKLM "Software\64 bit TEST" "TEST"
IfFileExists "$0\проверка файла.exe" 0 +3
StrCpy $INSTDIR $0
goto ok
StrCpy $INSTDIR "C:\Program Files\Моя программа путь по умолчанию"
ok:
FunctionEnd

Lex_from_Belarus
02-02-2013, 13:26
Нужно начать читать наш справочник и знакомиться с NSIS, вам здесь не будут постоянно готовые коды писать, по крайней мере я »
огромное спасибо, я так и пробовал, но не убрал "goto ok". :clapping:

ASiRU
04-02-2013, 12:31
profcom MKN
Спасибо огромное за участие и предоставленные примеры. Буду раскуривать эту петрушку дальше.

Awral
04-02-2013, 22:26
Как изменить чекбокс на любой из тех, которые лежат в папке ${NSISDIR}\Contrib\Graphics\Checks?
Строка ниже не помогает. Вставляю ее сразу после объявления страницы лицензии (!insertmacro MUI_PAGE_LICENSE license.rtf)
!define MUI_LICENSEPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\simple-round2.bmp"

kotkovets
05-02-2013, 14:40
Как изменить чекбокс на любой из тех, которые лежат в папке ${NSISDIR}\Contrib\Graphics\Checks?
Строка ниже не помогает »
никак стандартно.. и т.д нестандартно, нет такой константы - MUI_LICENSEPAGE_CHECKBITMAP..
вы сами себе объявили..

MKN
05-02-2013, 17:03
Необходимо запустить приложение из скрипта. Файлы этого приложения, как обычно, сначала распаковываются в $TEMP, откуда и происходит запуск-установка этого приложения.
Вопрос : возможно ли штатным образом зафиксировать окончание процесса распаковки файлов в $TEMP ? Есть ли какой либо Callback для этого ?

K.A.V.
05-02-2013, 18:49
Вопрос : возможно ли штатным образом зафиксировать окончание процесса распаковки файлов в $TEMP »
После команды распаковки файлов в $TEMP, пропиши распаковку своего файла "Опа окончание распаковки.tmp" и проверяй его наличие, не?
Или я не правильно понял суть вопроса? :)

DruOleg
05-02-2013, 18:59
Привет всем.
Прошу помочь с валидацией вводимой информации. (nsDialogs)



Function fnCustomInit

!insertmacro MUI_HEADER_TEXT "Параметры сервера" "Укажите данные для данного сервера"
nsDialogs::Create 1018
Pop $Dialog

${NSD_CreateLabel} 0 0 120u 15u "Новое имя компьютера:"
${NSD_CreateText} 120u 0 180u 13u "$srvname_old"
Pop $srvname_new
${NSD_OnChange} $srvname_new checkSrvName

${NSD_CreateLabel} 0 20u 120u 13u "Название населенного пункта:"
${NSD_CreateText} 120u 20u 180u 13u "Город"
Pop $clientDistrictName

${NSD_CreateLabel} 0 40u 120u 13u "Уникальный ID (1-99):"
${NSD_CreateText} 120u 40u 180u 13u "99"
Pop $clientDistrictId

${NSD_CreateLabel} 0 60u 120u 13u "Время синхронизации (ЧЧ:ММ:СС):"
${NSD_CreateText} 120u 60u 180u 13u "01:00:00"
Pop $clientDistrictTime

${NSD_CreateLabel} 0 80u 120u 13u "IP-адрес 1:"
${NSD_CreateText} 120u 80u 180u 13u "10.128.1.65"
Pop $SchoolURL

${NSD_CreateLabel} 0 100u 120u 13u "IP-адрес 2:"
${NSD_CreateText} 120u 100u 180u 13u "10.164.216.8"
Pop $URL

${NSD_CreateHline} 0 120u 100% 0

${NSD_CreateLabel} 0 125u 180u 13u "Текущее имя компьютера - $srvname_real"

nsDialogs::Show

FunctionEnd



Т.е. нужна, например, проверка - что в поле с ID указано число, а не текст.
Через логически функции это сделать можно, но как запретить переход на след страницу или возврат к предыдущей, пока не поправишь?

K.A.V.
05-02-2013, 19:49
Т.е. нужна, например, проверка - что в поле с ID указано число, а не текст. »
Можно сделать таким методом:
1. Подсчитываем количество символов в строке, в которой у нас хранится ID (команда StrLen)
2. Обрабатываем строку командой ${StrFilter}, указывая, что нужно отфильтровать и оставить только цифры
3. Подсчитываем количество символов в отфильтрованной строке (команда StrLen)
4. Сравниваем количество символов до фильтра и после, если количество символов не равное, значит в поле ID была указана буква (команда StrCmp)
Может быть, есть и другой способ, не знаю, может кто чего другого посоветует, но я бы так сделал :)

но как запретить переход на след страницу или возврат к предыдущей, пока не поправишь? »
Можете сделать неактивным кнопки "Назад" и "Далее" перед показом диалога, а в функции фильтра поля ID прописать команду на включение кнопок (если в поле всё норм) командой EnableWindow




© OSzone.net 2001-2012