Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: Victor_VG
Дата сообщения: 17.04.2014 12:34
MKN

В его случае этот код лишний, там и ещё одна синтаксическая ошибка сидит - в функции AeroGUI [] лишние:

Function aeroGUI
Aero::Apply [/btnold]
FunctionEnd

а формально надо

Function aeroGUI
Aero::Apply /btnold
FunctionEnd

и обе строки:

!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}}"


в данном примере можно и нужно убрать, и как я уже сказал в строке

!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}}"

сидит синтаксическая ошибка - }} . Понятно, что это опечатка, но компилятор выведет сообщение об ошибке и остановит сборку.
Автор: FanIT
Дата сообщения: 17.04.2014 13:02
MKN
Я эти строчки добавил. Теперь ошибки нет. Но текст все равно остался иероглифами. Причем кнопки "Далее" и "Отмена" нормально отображаются. Может что-то с nsDialogs не так.

Victor_VG

Цитата:
Aero::Apply [/btnold]

Это так было указанно в доках к этому плагину.
Автор: Victor_VG
Дата сообщения: 17.04.2014 13:12
FanIT

В "[]" указывают необязательные параметры. Это стандартная форма их записи, если какой-то параметр имеет варианты выбора, то они обозначаются разделителем "|". В записи кода этих элементов быть не должно.
Автор: FanIT
Дата сообщения: 17.04.2014 13:31

Цитата:
В "[]" указывают необязательные параметры. Это стандартная форма их записи, если какой-то параметр имеет варианты выбора, то они обозначаются разделителем "|". В записи кода этих элементов быть не должно.

Вот ведь. Век живи, век учись. Спасибо! Буду знать.
Автор: Victor_VG
Дата сообщения: 17.04.2014 13:49
FanIT

Пожалуйста, вы же учитесь и потому то, что вы это пока как новичок не знали вполне нормально. Потому ваша ошибка допустимая для новичка была бы не простительна к примеру для меня - я эти вещи знать обязан.
Автор: FanIT
Дата сообщения: 17.04.2014 16:06
Всем огромное спасибо!!! Оказывается сам скрипт был в UTF-8 кодировки. Преобразовал его в ansi и все стало нормально. Но все равно много нового от вас узнал. Еще раз спасибо огромное!
Автор: Victor_VG
Дата сообщения: 17.04.2014 16:20
FanIT

Если вы работаете с NSIS 2.x то там нужна кодировка ANSI, если с 3.x UNICODE, то допустима и UTF-8 с BOM.
Автор: FanIT
Дата сообщения: 18.04.2014 20:53
Всем привет! У меня еще один вопрос. В левом нижнем углу инсталятора есть надпись "Nullsoft install system". Как эту надпись можно заменить на свою?
Автор: Victor_VG
Дата сообщения: 18.04.2014 21:42
FanIT

Цитата:
Всем привет! У меня еще один вопрос. В левом нижнем углу инсталятора есть надпись "Nullsoft install system". Как эту надпись можно заменить на свою?

BrandingText "ваш_текст" в заголовке вашего скрипта. [more=К примеру так]
!define PRODUCT_NAME "dirhtml"
!define PRODUCT_VERSION "4.77"
!define PRODUCT_PUBLISHER "Copyright © 2000-2006 Eric Nitzsche"
!define PRODUCT_WEB_SITE "http://home.pacbell.net/nitzsche/dirhtml/dirhtml.html"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\dirhtml.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
SetCompressor /solid lzma
!include "MUI.nsh"
!define MUI_ABORTWARNING
!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\InnoSetupWiz.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\InnoSetupWiz.bmp"
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-blue-full.ico"
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "dirhtml"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\dirhtml.exe"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
!packhdr "setup.exe" '"upx.exe -9 --compress-icons=0 setup.exe"'
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\dirhtml"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "Path"
AllowRootDirInstall true
XPStyle on
BrandingText "dirhtml 4.77"
ShowInstDetails hide
VIProductVersion "4.7.7.0"
VIAddVersionKey /LANG=${LANG_ENGLISH} ProductName "dirhtml 4.77"
VIAddVersionKey /LANG=${LANG_ENGLISH} Comments "Generates html files from folder branches."
VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyName "Eric Nitzsche"
VIAddVersionKey /LANG=${LANG_ENGLISH} LegalCopyright "© Eric Nitzsche, 2000 - 2006, VictorVG @ VikSoft.Ru, 1996 - 2006. All Right Reserved."
VIAddVersionKey /LANG=${LANG_ENGLISH} FileDescription "Install dirhtml 4.77"
VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion "1.0.0.1"
VIAddVersionKey /LANG=${LANG_ENGLISH} ProductVersion "4.7.7"
VIAddVersionKey /LANG=${LANG_ENGLISH} InternalName "dirhtml"
VIAddVersionKey /LANG=${LANG_ENGLISH} LegalTrademarks "Eric Nitzsche, VikSoft.Ru"
VIAddVersionKey /LANG=${LANG_ENGLISH} OriginalFilename "dirhtml"
VIAddVersionKey /LANG=${LANG_RUSSIAN} ProductName "dirhtml 4.77"
VIAddVersionKey /LANG=${LANG_RUSSIAN} Comments "Dirhtml - утилита для составления HTML листингов структуры папок."
VIAddVersionKey /LANG=${LANG_RUSSIAN} CompanyName "Eric Nitzsche"
VIAddVersionKey /LANG=${LANG_RUSSIAN} LegalCopyright "© Eric Nitzsche 2000 - 2006, VictorVG @ VikSoft.Ru, 1996 - 2006. Все права защищены."
VIAddVersionKey /LANG=${LANG_RUSSIAN} FileDescription "Установка dirhtml 4.77"
VIAddVersionKey /LANG=${LANG_RUSSIAN} FileVersion "1.0.0.1"
VIAddVersionKey /LANG=${LANG_RUSSIAN} ProductVersion "4.7.7"
VIAddVersionKey /LANG=${LANG_RUSSIAN} InternalName "dirhtml"
VIAddVersionKey /LANG=${LANG_RUSSIAN} LegalTrademarks "Eric Nitzsche, VikSoft.Ru"
VIAddVersionKey /LANG=${LANG_RUSSIAN} OriginalFilename "dirhtml"
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Section "main" SEC01
SetOutPath "$INSTDIR"
SetOverwrite try
File "dirhtml\blue.txt"
File "dirhtml\blue2.txt"
File "dirhtml\blue3.txt"
File "dirhtml\brown.txt"
File "dirhtml\dirhtml.exe"
File "dirhtml\dirhtml_help.html"
File "dirhtml\fancy_dark.txt"
File "dirhtml\fancy_green.txt"
File "dirhtml\framed recursive file.ini"
File "dirhtml\frameset.txt"
File "dirhtml\frameset_xhtml.txt"
File "dirhtml\gray.txt"
File "dirhtml\green.txt"
File "dirhtml\javascript.txt"
File "dirhtml\left_frame.txt"
File "dirhtml\light_blue.txt"
File "dirhtml\Random recursive.ini"
File "dirhtml\readme.txt"
File "dirhtml\right_frame.txt"
File "dirhtml\single recursive file.ini"
File "dirhtml\valid_xhtml.txt"
SetOverwrite on
File "dirhtml\dirhtml.ico"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\dirhtml.lnk" "$INSTDIR\dirhtml.exe"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Read Me.lnk" "$INSTDIR\readme.txt"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section -AdditionalIcons
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
SetShellVarContext all
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\dirhtml.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Path" "$INSTDIR"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\dirhtml.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "Удаление программы $(^Name) было успешно завершено."
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Вы уверены в том, что желаете удалить $(^Name) и все компоненты программы?" IDYES +2
Abort
FunctionEnd
Section Uninstall
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\dirhtml.ico"
Delete "$INSTDIR\valid_xhtml.txt"
Delete "$INSTDIR\single recursive file.ini"
Delete "$INSTDIR\right_frame.txt"
Delete "$INSTDIR\readme.txt"
Delete "$INSTDIR\Random recursive.ini"
Delete "$INSTDIR\light_blue.txt"
Delete "$INSTDIR\left_frame.txt"
Delete "$INSTDIR\javascript.txt"
Delete "$INSTDIR\green.txt"
Delete "$INSTDIR\gray.txt"
Delete "$INSTDIR\frameset_xhtml.txt"
Delete "$INSTDIR\frameset.txt"
Delete "$INSTDIR\framed recursive file.ini"
Delete "$INSTDIR\fancy_green.txt"
Delete "$INSTDIR\fancy_dark.txt"
Delete "$INSTDIR\dirhtml_help.html"
Delete "$INSTDIR\dirhtml.exe"
Delete "$INSTDIR\brown.txt"
Delete "$INSTDIR\blue3.txt"
Delete "$INSTDIR\blue2.txt"
Delete "$INSTDIR\blue.txt"
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Read Me.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\dirhtml.lnk"
RMDir "$SMPROGRAMS\$ICONS_GROUP"
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd[/more]. Этому коду сто лет в обед, но он полностью рабочий.
Автор: FanIT
Дата сообщения: 19.04.2014 16:43
Victor_VG
Спасибо! Вы опять меня выручили.
Автор: Victor_VG
Дата сообщения: 19.04.2014 17:46
FanIT

Ладно, отблагодарите после помогая другим новичкам. Никто не рождается с полным набором нужных в жизни знаний и умений.
Автор: Gideon Vi
Дата сообщения: 21.04.2014 08:16
Доброго времени

Помогите с компиляцией проекта, пожалуйста. У меня проблема с StrRep.nsh, как минимум. Видимо то, что лежит здесь уже не подходит.
Да, мне нужен именно рецепт, как скомпилировать самому.
Спасибо.
Автор: MKN
Дата сообщения: 21.04.2014 11:22
Gideon Vi
Обозначь четко задачу. (Необходимые пошаговые действия)
Автор: Gideon Vi
Дата сообщения: 21.04.2014 13:25
В архиве проект. Он не компилируется, ругаясь на девятнадцатую строчку, в которой идет обращение к скрипту StrRep.nsh, который, вероятно, слишком свежий.
Мне нужен StrRep.nsh (и, возможно, ReplaceInFile.nsh), с которым эта сборка скомпилируется. Если такого в наличии нет, то прошу адаптировать скрипт под новые файлы.
У меня совершенно нет опыта в работе с сабжем и не хотелось бы ради разовой задачи его узнавать.
Автор: Victor_VG
Дата сообщения: 21.04.2014 14:21
Gideon Vi

Ошибки вот где, в строке 19 и 20:

    ${StrReplace} '$0' '\' '#^#~' '$EXEDIR'
    ${StrReplace} '$1' '#^#~' '\\' '$0'

такого макроса StrReplace нет, есть макрос StrRep имеющий параметры:

    ${StrRep} "выходная строка" "Исходная строка" "Искомая подстрока" "Заменяемая подстрока"

и регулярки он не понимает ибо работает строго по совпадению символов. В данном случае логика явно не верная, давай, формулируй мне задачу, а я напишу под неё нормальное решение. Всё одно эта штука в таком виде работать не будет...
Автор: FanIT
Дата сообщения: 22.04.2014 21:04
Всем привет! Ребят помогите! На страницы два чекбокса. Мне надо проверить, если они отмечены, создать ярлык. Но почему-то не создается. Подскажите, что не так?

Вот код:
${NSD_GetState} $cbDesktop $cbDesktopState

${if} cbDesktopState == ${BST_CHECKED}
CreateShortCut "$DESKTOP\ярлык.lnk" "$OUTDIR\программа.exe"
${endif}

${NSD_GetState} $cbMenu $cbMenuState

${if} $cbMenuState == ${BST_CHECKED}
CreateDirectory "$STARTMENU\папка"
CreateShortCut "$STARTMENU\папка\ярлык.lnk" "$OUTDIR\программа.exe"
${endif}
Автор: Victor_VG
Дата сообщения: 23.04.2014 03:47
FanIT

Он уже в начале обрезан - переменные надо определить или через !define или через var. Тут же $cbDesktopState стоит заменить регистром предварительно обнулив его, а у вас как я понимаю по сему фрагменту данные теряются и проверка не происходит....
Автор: FanIT
Дата сообщения: 23.04.2014 11:27
Victor_VG
Само собой все переменные объявлены через var в начале скрипта. Просто забыл сюда добавить. Спасибо.
Автор: Victor_VG
Дата сообщения: 23.04.2014 12:06
FanIT

Ясно. Тогда стоит поколдовать. Я в таких случаях просто ставлю переменные семафоры и в .onInit обнуляю их, а в начале скрипта вешаю группу не именованных секций с возможностью выбора компонент и после в них по срабатываю чекбокса ставлю семафор в "1" после чего проверяю через обычный StrCmp факт их установки. Такая логика работает надёжно, да и отследить ошибку тут много проще чем в LogicLib.
Автор: MKN
Дата сообщения: 23.04.2014 16:36
FanIT
надо : ${if} $cbDesktopState == 1
бла-бла-бла
Автор: AlekseyPopovv
Дата сообщения: 08.05.2014 06:37
Ребята, подскажите как шрифты скопировать в "C\Windows\Fonts"? Или как тихо установить?
CopyFiles /SILENT "$EXEDIR\${APPDIR}\20db\*" "$FONTS" - не копируется.
Автор: MKN
Дата сообщения: 08.05.2014 10:14
AlekseyPopovv

В простом случае можно так :

Код:
; копирование всех нужных шрифтов из папки Fonts
SetOutPath "$FONTS"
File /r "Путь\Fonts\*.*"
; регистрация в ОС каждого файла шрифта
StrCpy $0 "myFont1.ttf"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "здесь - полное имя шрифта" "$0"
System::Call "GDI32::AddFontResource(t) i ('$0') .s"
Автор: Victor_VG
Дата сообщения: 08.05.2014 10:24
AlekseyPopovv

Для этого нужны права админа.
Автор: FanIT
Дата сообщения: 14.05.2014 16:36
Всем привет! Я опять к вам за помощью. Можно ли в nsis установить драйвер? Есть только файл driver.sys и записи о нем в реестре.
Автор: MKN
Дата сообщения: 14.05.2014 17:45
FanIT

Цитата:
Можно ли в nsis установить драйвер?

Вряд ли, если нет сопутствующего inf файла. И установка драйверов в NSIS одним лишь кодом, дело не благодарное... Горожа и гемор, не стоящие того... Обычно используют, при установке классических драйверов (твой к ним не относится), сторонние утилиты, типа dpinst.
Автор: FanIT
Дата сообщения: 14.05.2014 18:54
MKN
Ясно. Спасибо. inf файле нет.
Автор: Victor_VG
Дата сообщения: 15.05.2014 13:26
FanIT

Цитата:
Можно ли в nsis установить драйвер? Есть только файл driver.sys и записи о нем в реестре.

Можно. Плагином NsSCM который не нуждается в inf-файле. Сам так драйвера часто ставлю. Главное правильно указать ему параметры. inf-файл нужен только для системного установщика, а плагин напрямую работает с SCM и в нём не нуждается.
Автор: MKN
Дата сообщения: 15.05.2014 14:10
Victor_VG

Цитата:
Плагином NsSCM

Плагину более 8 лет и на практике, далеко не всякий драйвер с ним устанавливается , плюс ко всему плагин не работает в X64 ОС... Недоразумение одним словом...
Автор: Victor_VG
Дата сообщения: 15.05.2014 14:34
MKN

NsExec и scm. Не вижу сложности. Другое дело если "недоразумение" это как мне сказал один малый "Всё, что не рекомендовано Mикрософт как официальный инструмент не имеет права на существование!". Они вот мне так же прислали "официальный инструмент" - Update 2826040 for Office 2013: May 13, 2014 для ... DEC OSF/1 AXP и FreeBSD 10 AMD64. А зачем он мне там нужен? На демонёнке у меня Либра 4.2.4 стоит, а на OSF/1 вообще офисного пакета нет за ненадобностью, но M$ в своём ответе сказала "Как не нужно!? У всех стоит наш лучший в мире Офис 2013, значит и вам это обновление жизненно необходимо!".
Автор: FanIT
Дата сообщения: 18.05.2014 17:01
У меня опять вопрос. Понадобилось мне при удалении программы сначала завершить ее процесс. В справке я нашел то, что нужно ProcessFunc.nsh. Но почему-то nsis на него ругается.

Вот код:
${KillProcess} "process.exe" $R0

Компилятор выдает такое:
Error in macro _KillProcessCall on macroline 2

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.