Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
MKN, спасибо! Забираю в копилку, пригодится и не раз...
Встречайте NSIS v3.03 (релиз от 29 января 2018): страница загрузки (https://sourceforge.net/projects/nsis/files/NSIS%203/3.03/)
F.1.1 Release Notes
Building NSIS with Python 2.6 or older is no longer supported
F.1.2 Changelog
F.1.2.1 Major Changes
Added more NSD controls and macros (RFE #543)
Added !gettlbversion
Library TLB and VxD version support on POSIX (patch #284)
F.1.2.2 Minor Changes
Added System plug-in v2 syntax option
Added System plug-in B and H types
Added IntPtrCmp, IntPtrCmpU, and IntPtrOp
Added Int64Cmp, Int64CmpU and Int64Fmt (64-bit only)
Added IntOp and System::Int64Op >>> operator
Added more !define /math operators
Added WinVer.nsh IsDomainController (patch #286)
Plug-ins now set the ASLR, DEP, LAA, NOSEH and TS PE flags (bug #1188)
MakeNSIS exits with code 0 for various information commands (bug #1193)
Removed unused NSD_LB_Clear macro parameter
F.1.2.3 Translations
Added Tatar (patch #281)
Fixed and updated Scottish Gaelic (patch #285, bug #1197)
Updated Italian (bug #1194)
F.1.2.4 Build System
Added support for Python 3
Dropped support for Python 2.6 and older
Добрый вечер всем. Есть вопрос по поводу переноса строки в Control_EDIT. Возникла идея создать страницу готовности к установке по аналогу inno (PreparingPage). За основу взял вариант который решался(и решился(спасибо Flix и MKN)) на этой страничке форума. Суть затеи такова: на сновании выбранных задач инсталляции должен выводиться список, в котором подробно указаны выбранные задачи(язык, ярлыки, путь установки...). Хм... Думал делов-то, при наличии уже имеющихся знаний и тем более готовых решений. Но не тут то было... Пробовал и так $\n и так \n и loop-ил сверху вниз и не вышло.
!define PRODUCT_NAME "My Program"
!define PRODUCT_VERSION "1.0"
!include "MUI2.nsh"
!include "Sections.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "FileFunc.nsh"
Page custom PageInit1 PageDestroy1
!insertmacro MUI_PAGE_DIRECTORY
Page custom PreparingPage
;Languages
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_RESERVEFILE_LANGDLL
Function .OnInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
LangString PRPAGE_TEXT ${LANG_RUSSIAN} "Всё готово к установке"
LangString PRPAGE_TEXT ${LANG_ENGLISH} "Ready to Install"
LangString PRPAGE_SUBTEXT ${LANG_RUSSIAN} "Программа установки готова начать установку ${PRODUCT_NAME} на ваш компьютер."
LangString PRPAGE_SUBTEXT ${LANG_ENGLISH} "Setup is now ready to begin installing ${PRODUCT_NAME} on your computer."
LangString CUSTPAGE_1_TITLE ${LANG_RUSSIAN} "Выбор языка интерфейса и дополнительных задач"
LangString CUSTPAGE_1_TITLE ${LANG_ENGLISH} "Selecting language and additional tasks"
LangString CUSTPAGE_1_SUBTITLE ${LANG_RUSSIAN} "Выберите язык интерфейса и дополнительные задачи установки."
LangString CUSTPAGE_1_SUBTITLE ${LANG_ENGLISH} "Select the interface language and additional installation tasks."
LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_RUSSIAN} "Язык интерфейса:"
LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_ENGLISH} "Interface language:"
LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_RUSSIAN} "Русский язык"
LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_ENGLISH} "Russian language"
LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_RUSSIAN} "Английский язык"
LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_ENGLISH} "English language"
LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_RUSSIAN} "Дополнительные задачи:"
LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_ENGLISH} "Additional tasks:"
LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_RUSSIAN} "Ярлык на Рабочем столе"
LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_ENGLISH} "Desktop Shortcut"
LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_RUSSIAN} "Ярлык(и) в меню Пуск"
LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_ENGLISH} "Shortcut(s) in the Start menu"
LangString VIBRANO ${LANG_RUSSIAN} "Выбрано:"
LangString VIBRANO ${LANG_ENGLISH} "Selected:"
# Variables
var CustPage1
Var GroupBox1
var Check1
var Check2
Var CheckBox1
Var CheckBox2
Var GroupBox2
var Radio1
var Radio2
Var RadioButton1
Var RadioButton2
var Preparing
Var Preparing_Control_EDIT
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Main_setup.exe"
InstallDir "$PROGRAMFILES\My Program"
Function PageInit1
nsDialogs::Create 1018
Pop $CustPage1
${If} $CustPage1 == error
Abort
${EndIf}
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE)
${Else}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE)
${EndIf}
; === GroupBox1 (type: GroupBox) ===
${NSD_CreateGroupBox} 1.9u 2.38u 131.65u 43u "$(CUSTPAGE_1GRBOX1_CAPT)"
Pop $GroupBox1
; === RadioButton1 (type: RadioButton) ===
${NSD_CreateRadioButton} 7.9u 13.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT1_CAPT)"
Pop $RadioButton1
${NSD_SetState} $RadioButton1 1
; === RadioButton2 (type: RadioButton) ===
${NSD_CreateRadioButton} 7.9u 27.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT2_CAPT)"
Pop $RadioButton2
; === GroupBox2 (type: GroupBox) ===
${NSD_CreateGroupBox} 1.32u 53.38u 131.65u 80.54u "$(CUSTPAGE_1GRBOX2_CAPT)"
Pop $GroupBox2
; === CheckBox1 (type: Checkbox) ===
${NSD_CreateCheckbox} 7.9u 66.08u 121.11u 12.31u "$(CUSTPAGE_1CHBOX1_CAPT)"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
; === CheckBox2 (type: Checkbox) ===
${NSD_CreateCheckbox} 7.9u 82.46u 121.11u 12.31u "$(CUSTPAGE_1CHBOX2_CAPT)"
Pop $CheckBox2
${NSD_SetState} $CheckBox2 1
nsDialogs::Show
FunctionEnd
Function PageDestroy1
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $RadioButton2 $Radio2
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
FunctionEnd
Function PreparingPage
nsDialogs::Create 1018
Pop $Preparing
${If} $Preparing == error
Abort
${EndIf}
; !insertmacro MUI_HEADER_TEXT "" ""
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT)
${Else}
!insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT)
${EndIf}
!define MYMULTILINEEDIT_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_MULTILINE}|${ES_READONLY}
nsDialogs::CreateControl EDIT ${MYMULTILINEEDIT_STYLE} ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} 0u 0u 300u 140u ""
Pop $Preparing_Control_EDIT
Call ShowSelectedItems
nsDialogs::Show
FunctionEnd
Function ShowSelectedItems
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)" ;"STR:$(VIBRANO)$\n" - такой вариант не работает
${If} $Radio1 == 1
; loop:
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1RADBUT1_CAPT)"
;IfErrors +1 loop
${If} $CheckBox1 == 1
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1CHBOX1_CAPT)"
${EndIf}
${EndIf}
FunctionEnd
Section ""
SectionEnd
Что примерно хотел сделать
https://d.radikal.ru/d35/1801/8f/cc7cbe0dc031t.jpg (https://d.radikal.ru/d35/1801/8f/cc7cbe0dc031.png)
Alex S, предлагаю вам такой вариант решения. В вашем примере сценария замените функцию "ShowSelectedItems" следующим кодом:
Function ShowSelectedItems
StrCpy $7 $(VIBRANO)
${If} $Radio1 == ${BST_CHECKED}
StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT1_CAPT)'
${EndIf}
${If} $Radio2 == ${BST_CHECKED}
StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT2_CAPT)'
${EndIf}
${If} $Check1 == ${BST_CHECKED}
${OrIf} $Check2 == ${BST_CHECKED}
StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX2_CAPT)'
${EndIf}
${If} $Check1 == ${BST_CHECKED}
StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX1_CAPT)'
${EndIf}
${If} $Check2 == ${BST_CHECKED}
StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX2_CAPT)'
${EndIf}
StrCpy $7 '$7$\r$\n$\r$\n$\r$\n$\t$(^DirSubText) "$(^NameDA)":'
StrCpy $7 '$7$\r$\n$\r$\n$\t$INSTDIR'
SendMessage $Preparing_Control_EDIT ${WM_SETTEXT} 0 "STR:$7"
FunctionEnd
Смысл вот в чем. Под текст, который необходимо вывести на странице, мы выделяем переменную (в примере $7). В ней мы формируем массив строк, в зависимости от выбранных пользователем параметров установки. После чего, последней командой, мы передаем эту строку необходимому элементу управления. Переносы и отступы формируются предусмотренными в NSIS константами: перевод строки — $\r$\n; табуляция — $\t. Под строку желательно выделить отдельную переменную, а не предустановленную.
http://funkyimg.com/i/2BPc8.png
Flix, спасибо большое за помощь. Очень интересный вариант... Я если честно мыслил в другую сторону. Сел, почитал справочку NSIS и осенило... Начал пробовать вариант с созданием временного файла, в который по ходу записываются данные настроек установки и в последний момент с него производится считывание и вывод информации... Собственно, как вариант, идея сработала. Твой вариант интереснее, я че-то немного недопетрил идти в этом направлении. Ещё раз спасибо за помощь.
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
Var /Global PrepFile
;FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w
;FileClose $PrepFile # Закрываем файл
FunctionEnd
Function ShowSelectedItems
FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w ;
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)"
${If} $Radio1 == 1
FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT1_CAPT)$\r$\n" # Записываем нужную информацию
${Else}
FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT2_CAPT)$\r$\n" # Записываем нужную информацию
${EndIf}
${If} $Check1 == 1
FileWrite $PrepFile "$(CUSTPAGE_1CHBOX1_CAPT)$\r$\n"
${EndIf}
${If} $Check2 == 1
FileWrite $PrepFile "$(CUSTPAGE_1CHBOX2_CAPT)$\r$\n"
${EndIf}
FileClose $PrepFile # Закрываем файл
FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" r
loop:
FileRead $PrepFile $2
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$2"
IfErrors +1 loop
FileClose $PrepFile # Закрываем файл
FunctionEnd
AlekseyPopovv
04-02-2018, 11:13
Как проверить контрольную сумму "CRC" файла? Если не совпадает, то сообщение "куку" и выход, если совпадает, то идём дальше...
Как проверить контрольную сумму "CRC" файла? »
Воспользуйтесь плагином CRCCheck (http://nsis.sourceforge.net/CRCCheck_plug-in).
Function CheckCRC
# Проверяем наличие требуемого файла
IfFileExists $INSTDIR\file.exe 0 noFile
# Если файл существует, то проверяем его CRC
# Для проверки используется плагин CRCCheck (http://nsis.sourceforge.net/CRCCheck_plug-in)
CRCCheck::GenCRC $INSTDIR\file.exe
# Записываем значение CRC-файла из стека в переменную $1
Pop $1
# Выводим сообщение в отчете установки со значением CRC-файла
DetailPrint "~ Файл file.exe CRC = $1"
# Необходимая контрольная сумма файла (НЕХ) CRC = 6528E1D3
# Сравниваем значения полученной CRC с заданным (в десятичном формате)
${IfNot} $1 == 1697178067
# Если значения не совпадают...
# Метка перехода в случае отсутствия указанного файла
noFile:
# Выводим сообщение в отчете установки о неверном значении CRC
DetailPrint "~ Файл file.exe не найден или его CRC отличается от исходной"
# Показываем пользователю диалог с сообщением
MessageBox MB_ICONINFORMATION|MB_OK "Продолжить работу инсталлятора невозможно.$\r$\n\
Файл file.exe не существует или его CRC не$\r$\n\
не совпадает с оригинальным значением."
# Завершаем работу программы установки
Quit
${EndIf}
# Выводим сообщение в отчете установки об успешном выполнении операции
DetailPrint "~ CRC файла file.exe - OK"
FunctionEnd
AlekseyPopovv
04-02-2018, 13:07
Flix, разобрался.
Мужики, добрый день. Снова возник вопрос с диалогом выбора папки назаначения. Возможно ли в зависимости от языка инсталлятора(русский-английский) сменить текст кнопок "отмена" и "создать папку" на текст соответствующего языка?
https://b.radikal.ru/b07/1802/8d/aff8f150251dt.jpg (https://b.radikal.ru/b07/1802/8d/aff8f150251d.png)
!define PRODUCT_NAME "MyProg"
!define PRODUCT_VERSION "1.0"
!include "MUI2.nsh"
!include "nsDialogs.nsh"
Var BrowsePage
Var BrowsePage_DirRequest1_Txt
Var BrowsePage_DirRequest1_Btn
Var BrowsePage_DirRequest2_Txt
Var BrowsePage_DirRequest2_Btn
Page custom BrowsePage1
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "English"
LangString BrowseButtonCaption ${LANG_RUSSIAN} "Обзор..."
LangString BrowseButtonCaption ${LANG_ENGLISH} "Browse..."
LangString CUSTPAGE_TITLE ${LANG_RUSSIAN} "Текст на русском"
LangString CUSTPAGE_TITLE ${LANG_ENGLISH} "Tekst na angliyskom"
LangString CUSTPAGE_SUBTITLE ${LANG_RUSSIAN} "СубТекст на русском"
LangString CUSTPAGE_SUBTITLE ${LANG_ENGLISH} "SubTekst na angliyskom"
LangString BrowseDialogLabel ${LANG_RUSSIAN} "Текст на русском"
LangString BrowseDialogLabel ${LANG_ENGLISH} "Tekst na angliyskom"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
Function .OnInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Function BrowsePage1
nsDialogs::Create 1018
Pop $BrowsePage
${If} $BrowsePage == error
Abort
${EndIf}
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE)
${Else}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE)
${EndIf}
; === DirRequest1_Txt (type: Text) ===
${NSD_CreateText} 7.9u 17.23u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}"
Pop $BrowsePage_DirRequest1_Txt
; === DirRequest1_Btn (type: Button) ===
${NSD_CreateButton} 235.65u 17.23u 52.66u 12.31u "$(BrowseButtonCaption)"
Pop $BrowsePage_DirRequest1_Btn
${NSD_OnClick} $BrowsePage_DirRequest1_Btn BrowsePage_DirRequest1_Click
; === DirRequest2_Txt (type: Text) ===
${NSD_CreateText} 7.9u 46.77u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}"
Pop $BrowsePage_DirRequest2_Txt
; === DirRequest2_Btn (type: Button) ===
${NSD_CreateButton} 235.65u 46.77u 52.66u 12.31u "$(BrowseButtonCaption)"
Pop $BrowsePage_DirRequest2_Btn
${NSD_OnClick} $BrowsePage_DirRequest2_Btn BrowsePage_DirRequest2_Click
nsDialogs::Show
FunctionEnd
Function BrowsePage_DirRequest1_Click
Pop $R0
${If} $R0 == $BrowsePage_DirRequest1_Btn
${NSD_GetText} $BrowsePage_DirRequest1_Txt $R0
nsDialogs::SelectFolderDialog /NOUNLOAD "" "$R0"
Pop $R0
${If} "$R0" != "error"
${NSD_SetText} $BrowsePage_DirRequest1_Txt "$R0"
${EndIf}
${EndIf}
FunctionEnd
Function BrowsePage_DirRequest2_Click
System::Call 'SHELL32::SHGetSpecialFolderLocation(i0,i0x2,*i.r2)i.r0'
System::Call '*(i$hwndparent,i$2,i,t "$(BrowseDialogLabel)",i0x470,kr3,i0,i0)i.r1'
System::Call 'SHELL32::SHBrowseForFolder(ir1)i.r0'
System::Call 'OLE32::CoTaskMemFree(ir2)'
System::Free $1
${If} $0 <> 0
System::Call 'SHELL32::SHGetPathFromIDList(i$0,t "" R9)'
${NSD_SetText} $BrowsePage_DirRequest2_Txt= $R9
${EndIf}
System::Call 'OLE32::CoTaskMemFree(ir0)'
FunctionEnd
Section ""
SectionEnd
Возможно ли в зависимости от языка инсталлятора(русский-английский) сменить текст кнопок "отмена" и "создать папку" на текст соответствующего языка? »
Это диалоговое окно и в первом и втором случае вызывается из системной библиотеки, язык которой зависит от языка установленной ОС. То есть, независимо от выбранного языка установки, на русской системе это диалоговое окно будет на русском. Соответственно на английской системе этот диалог будет на английском и т.д. Единственное что можно задать, так это надпись в шапке диалога (на вашем скрине показано стрелкой). :)
AlekseyPopovv
07-02-2018, 13:52
Как защитить инсталлятор от вскрытия? Можно подробнее...
Что было так...
Привет народ,
мои очередные вопросы:
1. как сейчас обстоят дела с определением винды 10й ? Ранее было членово с этим..
2. как заблочить кнопу далее в окне компонентов если ни один из них еще не выбран ?
есть несколько вариантов:
а) галочка на одном из чекбоксов автоматически установлена в зависимости от выбранного языка инсталлятора и/или ОС;
б) если ни один чекбок не выбран то при нажатии "Далее" выводится сообщение "бла-бла-бла" и установка далее невозможна пока не будет отмечен один из чек боксов;
в) заблокировать кнопку "Далее" пока не будет отмечен один из чекбоксов.
проблема в том что чек-боксы у меня исключающие друг-друга, + работаю в старом Нсис под Юни 2.46.5..
У кого нить есть идеи как сие получше реализовать ?! если можно с примерами.. :)
как заблочить кнопу далее в окне компонентов если ни один из них еще не выбран ? »
Уже было реализовано kotkovets (для стандартых страниц) :
OutFile "NoActivButtonInst.exe"
var hInst
!include "MUI2.nsh"
!insertmacro MUI_PAGE_WELCOME
;функция во время открытия странички компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTS_SHOW
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian
;макрос проверки секций, если одна из секций отмечена возврат - 1, иначе - 0;
;в intsec - указываем количество секций в скрипте
!macro CheckSection intsec ret
Push ${intsec}
System::Store SR2
${For} $R0 1 $R2
SectionGetFlags $R0 $R1
${IfThen} $R1 == 1 ${|}${Break}${|}
${Next}
Push $R1
System::Store L
Pop ${ret}
!macroend
SubSection /e test IDS_1
Section /o "Компонент №1" ID_1
SectionEnd
Section /o "Компонент №2" ID_2
SectionEnd
Section /o "Компонент №3" ID_3
SectionEnd
Section /o "Компонент №4" ID_4
SectionEnd
Section /o "Компонент №5" ID_5
SectionEnd
Section /o "Компонент №6" ID_6
SectionEnd
SubSectionEnd
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${ID_1}
!insertmacro RadioButton ${ID_2}
!insertmacro RadioButton ${ID_3}
!insertmacro RadioButton ${ID_4}
!insertmacro RadioButton ${ID_5}
!insertmacro RadioButton ${ID_6}
!insertmacro EndRadioButtons
!insertmacro CheckSection 6 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd
Function .OnInit
StrCpy $1 ${ID_1}
;SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу
;чтоб компоненты в группе по умолчанию были свёрнуты
;SectionSetFlags ${IDS_1} -290
FunctionEnd
Function COMPONENTS_SHOW
GetDlgItem $hInst $HWNDPARENT 1 ;находим HWND кнопки "установить"
!insertmacro CheckSection 6 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd
Ессно код можно корректировать для своих задач.
как сейчас обстоят дела с определением винды 10й ? »
Как и ранее - без проблем. Вариантов море. К примеру, железно работает детект. W10, с помощью StdUtils.
Уже было реализовано kotkovets (для стандартых страниц) : »
Спасибо, буду посмотреть если для меня сгодиться.. :)
Как и ранее - без проблем. Вариантов море. К примеру, железно работает детект. W10, с помощью StdUtils. »
Не все так просто, и проблемы были с определением номера версии ОС..
StdUtils - это что и где можно глянуть ?!
Зы, напоминаю, у мня старая ОС, старый софт, и Нсиська на юникодах.. :yes:
StdUtils - это что и где можно глянуть ?! »
NSIS Plugin
https://github.com/lordmulder/stdutils/releases
!include "StdUtils.nsh"
${StdUtils.GetRealOSVersion} $1 $2 $3
DetailPrint "Real Windows NT Version: $1,$2 (Service Pack: $3)"
${StdUtils.GetRealOSBuildNo} $1
DetailPrint "Real Windows NT BuildNo: $1"
${StdUtils.GetRealOSName} $1
DetailPrint "RealOSName: $1"
${StdUtils.VerifyOSVersion} $1 6 1 0 ; 10 0 0
DetailPrint "Check for Windows 10: $1"
MKN,
Еще вопрос есть, по части языков..
При запуске инсталлера (если мультиланг) выводится окно с выбором языка.. Вопрос, как сохранить отмеченный выбор языка в переменную и/или как вариант определить язык ОС по умолчанию, с занесением его в аналогичную переменную?
В справке рылся но что-то не нашел где и откуда копать.. :unsure:
Зы, вроде разобрался и нашел что нужно, но если будут еще каие варианты, то я не против глянуть..
не могу найти nsisUnrar плагин от Bioware, надо встроить в инсталятор распаковщик winrar-архивов, желательно rar5-архивов, есть пример как это можно сделать?
Привет народ,
Очередной вопрос насущный, можно ли на Нсиське сделать подобное::
- инсталлер должен позволять устанавливать софт в разные места на ПК и на разные версии игры, а не так что установил одну копию и дальше только удалять ?!
Спасибо.. :)
инсталлер должен позволять устанавливать софт в разные места на ПК»
Смотрите команду SetOutPath (http://nsis.sourceforge.net/Reference/SetOutPath).
и на разные версии игры »
Перед установкой делайте проверку наличия необходимых файлов в папке установки, а также их версии (IfFileExists и так далее).
Прочитайте "Справочник по NSIS (http://forum.oszone.net/thread-168287.html)", там есть примеры.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.