Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
inco1
"В связи с этим вопрос, как можно удалить кавычки и слэш, чтобы в переменную записалось правильно C:\Program Files, без кавычек и слэша в конце?"
Запишите вашу переменную в текстовый файл, можно ini, config, без разницы. Сразу увидите, что нужно удалить, заменить. А дальше используйте что-нибудь, вроде ReplaceInFile3 для замены/удаления символов. Дальше считываете в переменную.
Если по краям символы, то можно и без текстового файла обойтись, а использовать возможности StrCpy по обрезке, так проще.
skywhy1337
11-06-2024, 18:46
Тема помогла
Kopejkin
14-10-2024, 14:17
Подскажите, пожалуйста, кто знает, как можно запустить службы из сценария NSIS?
Программа устанавливает две службы. В свойствах служб пути указывают на исполняемые файлы в папке установленной программы: dataserv.exe и mainserv.exe.
Службы прекрасно убиваются с помощью, например, ${KillProcess} "dataserv.exe" $0.
А вот как запустить службы в конце работы своего инсталятора?
При попытке запустить исполняемый файл dataserv.exe или mainserv.exe из папки программы выводится сообщение:
Windows Service Start Failure
---------------------------
Cannot start service from the command line or a debugger. A Windows Service must first be installed (using installutil.exe) and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command.
---------------------------
OK
P.S. Ничего более умного для запуска службы не нашел: Exec '"$SYSDIR\cmd.exe" /c net start "APC Data Service"'
Правда, консольное окно вылазит...
А вот как запустить службы в конце работы своего инсталятора? »
Плагин NSIS Simple Service (https://nsis.sourceforge.io/NSIS_Simple_Service_Plugin) использовать пробовали?
Windows Service Start Failure
---------------------------
Cannot start service from the command line or a debugger. A Windows Service must first be installed (using installutil.exe) and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command.
---------------------------
OK »
В этом сообщении уже написан ответ, что нужно сделать. Службу сначала устанавливают, а потом запускают.
Дополнительная информация How to: Install and uninstall Windows services (https://learn.microsoft.com/en-us/dotnet/framework/windows-services/how-to-install-and-uninstall-services).
В вашем случае установка службы из командной строки:
installutil dataserv.exe
Только предварительно необходимо убедиться, что на компьютере пользователя установлен компонент Installutil.exe (https://learn.microsoft.com/en-us/dotnet/framework/tools/installutil-exe-installer-tool).
Запуск службы из командной строки:
net start [имя_службы]
Но для начала попробуйте плагин NSIS Simple Service.
Kopejkin
16-10-2024, 09:37
Flix, спасибо. Плагин посмотрю.
Может не заметили, я дополнил свое сообщение. Службу успешно запускаю с помощью строки в сценарии NSIS: Exec '"$SYSDIR\cmd.exe" /c net start "APC Data Service"'. Не нравится то, что консольное окно вылазит... Хотя, и так сойдет.
Всем привет. Не осталось ли у кого-нибудь в закромах этого (https://nsis.sourceforge.io/Color_Selector_for_NSIS) инструмента? Ссылки мертвые...
Нужно при нажатии на кнопку вызвать окно выбора цвета и выбранный цвет записать в переменную... Такого раньше не делал, но полагаю что этот инструмент решил бы задачу...
Alex S,
Можно ведь использовать любую утилитку ColorPicker (их много в сети). Нажал кнопку(можно из своего NSIS инсталлера, если надо), запустился ColorPicker, выбирай нужный цвет...
Во многих таких утилитах, кроме отображения значения цвета в разных системах , есть возможность копирования выбранного значения цвета в буфер.
А в какую переменную предполагается помещать цветовое значение ? В код скрипта NSIS ?
В код скрипта NSIS ? »
Да, всё верно, в код скрипта. В дальнейшем из переменной цветовое значение будет записываться в ini-файл...
Попробую подыскать ColorPicker для этой задачи, но думаю что лучшим решением было бы вызвать окно «Цвет» из Windows (как его вызвать пока не знаю, буду искать и пробовать).
Спасибо за ответ!
Всем привет! Скажите пожалуйста можно ли как-то распаковать инсталятор чтобы посмотреть исходный код? Знаю что в Inno Setup есть такая возможность. Как насчет Nsis?
заранее большое спасибо!
Скажите пожалуйста можно ли как-то распаковать инсталятор чтобы посмотреть исходный код? »
Часть кода с кучей мусора можно увидеть, распаковав nsis с помощью спец build 7z (часто входит в состав проги UniExtract).
Если в коде есть макросы, то их никак не извлечь. Т.е. 7z годен только для распаковки простейших инсталляторов...
Часть кода с кучей мусора можно увидеть, распаковав nsis с помощью спец build 7z (часто входит в состав проги UniExtract).
Если в коде есть макросы, то их никак не извлечь. Т.е. 7z годен только для распаковки простейших инсталляторов...
Спасибо. Попробовал ничего не извлекает. Скажите пожалуйста есть ли готовый скрипт для создания инсталлятора? Для inno Setup видел много а для nsis чего то не находил. Спасибо заранее.
есть ли готовый скрипт для создания инсталлятора? »
В шапке темы много полезной информации. Начать можно с "Cправочника NSIS", где есть примеры.
Grabber2006
28-01-2025, 19:48
Вместе в NSIS устанавливается куча примеров на все случаи жизни. Простейшие варианты требуют минимальной правки - корректировки названия и списка файлов своего приложения.
Например, example2.nsi содержит полноценный инсталлятор
Спасибо! Справочник скачал, буду разбираться. Спасибо!
Всем привет! Подскажите пожалуйста что подправить в данном коде,чтобы получится инсталлятор следующего вида?
Цель сделать вот такой.
https://e.radikal.host/2025/01/31/Installer.gif (https://radikal.host/i/2gjmAB)
У меня получается вот такой.
https://e.radikal.host/2025/01/31/Untitled-1.gif (https://radikal.host/i/2gjzkx)
Заранее огромное спасибо!
RadoXX,
Можно, как вариант, как то так :
OutFile "Test.exe"
InstallDir "$EXEDIR"
!include "MUI2.nsh"
!define MUI_HEADER_TRANSPARENT_TEXT
!define MUI_CUSTOMFUNCTION_GUIINIT GUIInit
;!define MUI_UI_HEADERIMAGE_RIGHT
;!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_HEADER_TEXT "мой текст"
!define MUI_PAGE_HEADER_SUBTEXT "мой текст-2"
!define MUI_DIRECTORYPAGE_TEXT_TOP "мой текст3"
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "мой текст4"
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_HEADER_TEXT "мой текст"
!define MUI_PAGE_HEADER_SUBTEXT "мой текст-2"
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_INSTFILESPAGE_FINISHHEADER_TEXT "мой текст"
!define MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT "мой текст-2"
!insertmacro MUI_PAGE_INSTFILES
;!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English
Function GUIInit
InitPluginsDir
File "/oname=$PLUGINSDIR\m.bmp" "m.bmp" ; моя bmp картинка размером 497х57
System::Call 'user32::CreateWindowEx(i, t"STATIC", t, i${SS_BITMAP}|${WS_CHILD}|${WS_VISIBLE},i,i,i,i,i$HWNDPARENT,i1500,i,i)i.R1'
System::Call 'user32::SetWindowPos(iR1,i,i,i,i,i,i2)'
${NSD_SetImage} $R1 "$PLUGINSDIR\m.bmp" $R0
GetDlgItem $R0 $HWNDPARENT 1034
SetCtlColors $R0 "" transparent
GetDlgItem $R0 $HWNDPARENT 1039
ShowWindow $R0 ${SW_HIDE}
System::Call 'user32::DestroyWindow(iR0)'
FunctionEnd
Section
SectionEnd
Если свой текст не нужен - ничего и не пиши ( а "кавычки" оставь)...
Странички приветствия и финиша, если надо, раскомментируй (картинки и на них можно поместить, примеры уже были)
Приветствую всех кто в теме... Снова я со своими проблемами.
Пытаюсь вызвать стандартное окно выбора цвета из библиотеки Windows.
Набросал немного кода, часть моего, часть чужого, но результат печальный...
В общем нужна помощь, уже третий день жую этот код и десятки способов, всё никак не дойду к цели.
# На базе этого: https://stackoverflow.com/questions/52926487/can-i-load-multiple-dlls-using-loadlibrary-in-nsis
#
Name "SelectColor"
OutFile "SelectColor.exe"
;--------------------------------
!include "nsDialogs.nsh"
!include "System.nsh"
!include "LogicLib.nsh"
; Pages
Page custom CustPage_Create
;--------------------------------
var SelColor_Btn
var CustPage
var SelColor
; dialog create function ;
Function CustPage_Create
; === (type: Dialog) === ;
nsDialogs::Create 1018
Pop $CustPage
${If} $CustPage == error
Abort
${EndIf}
; === SelColor_Button (type: Button) ===
${NSD_CreateButton} 30u 30u 90u 13u "Выбрать цвет"
Pop $SelColor_Btn
${NSD_OnClick} $SelColor_Btn "SelectColor"
nsDialogs::Show
FunctionEnd
Function SelectColor
System::Call 'KERNEL32::LoadLibrary(t "$SYSDIR\comdlg32.dll")p.r8 ?e'
Pop $7 ; Get r9 result
${IfThen} $8 P= 0 ${|} MessageBox MB_ICONSTOP "Не удалось загрузить $SYSDIR\comdlg32.dll, ошибка $7" ${|}
${If} $8 P<> 0
System::Call 'KERNEL32::GetProcAddress(pr8, m "ChooseColorA")p.r9 ?e'
Pop $7 ; Get ?e result
${IfThen} $9 P= 0 ${|} MessageBox MB_ICONSTOP "Не удалось найти экспортированную функцию, ошибка $7." ${|}
${EndIf}
System::Call '$SYSDIR\comdlg32::ChooseColorA(t r0) i r1'
Pop $SelColor
MessageBox MB_OK "Color Selected: $SelColor"
FunctionEnd
Section ""
SectionEnd
Alex S, а для чего нужно вызывать ColorDialog именно кодом NSIS ?
Вызов должен быть из какого то инсталлятора или программы на NSIS ?
Не проще ли вызывать(или использовать) уже готовую конструкцию ColorPicker, которых море... В том числе и оч. малых размеров...
Или у тебя чисто спортивно-программистский интерес ? :)
Это маленькая программка на nsis. Её задача менять подсветку синтаксиса, путем записи в ini-файл готовых схем. Вызвать окно выбора цвета нужно для выбора цвета фона подсветки. То есть схемы подсветки идут без фона, фон каждый настроит под свой вкус, глаза, тему Виндоус и т.д...
Пробовал я некоторые ColorPicker-ы, но в итоге не вышло получить на выходе цвет записанный в переменную...
Alex S,
Понятно. Давно наши NSIS-гуру не появлялись в теме, подсказали бы...
Как вариант, можно получать в переменную данные из соотв. окна ColorPicker_a(т.е. после того, как пользователь выбрал нужный цвет фона и кликнул кнопку "Мой выбор"). Насколько это реализуемо будет зависеть о реализации оконного хоз-ва конкретного ColorPicker_a. Думаю проблем быть не должно...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC