Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
21-05-2014, 01:04
Как запустить ExecWait в режиме SILENT? »
в этом плаге, режим зависит от самого приложения... есть через апи код (если нужно, пороюсь выложу)
есть плаги:
http://nsis.sourceforge.net/ExecCmd_plug-in
http://nsis.sourceforge.net/ExecDos_plug-in
Определение статуса компьютера в сети
OutfFle "NetGetJoinInformation.exe"
;http://msdn.microsoft.com/en-us/library/windows/desktop/aa370423(v=vs.85).aspx
Section
System::Call 'Netapi32::NetGetJoinInformation(w "", *i.r0,*i.r1)i.r2'
System::Call '*$0(&w1024.r3)'
System::Call 'Netapi32::NetApiBufferFree(ir0)'
Messagebox MB_OK "NETSETUP_JOIN_STATUS=$1 Name=$3"
;NETSETUP_JOIN_STATUS=(NetSetupUnknownStatus,NetSetupUnjoined,NetSetupWorkgroupName,NetSetupDomainNa me);
;NetSetupUnknownStatus = 0 - The status is unknown * Статус не определён
;NetSetupUnjoined = 1 - The computer is not joined * Отсутствует соединение компьютера
;NetSetupWorkgroupName = 2 - The computer is joined to a workgroup * Компьютер присоединен к рабочей группе
;NetSetupDomainName = 3 - The computer is joined to a domain * Компьютер присоединен к домену
SectionEnd
в этом плаге, режим зависит от самого приложения... есть через апи код (если нужно, пороюсь выложу) »
Мне нужно запустить .bat файл в тихом (silent) режиме. Когда-то это делал, но сейчас забыл как. Вроде указывал /SILENT. Но строчка ниже не работает - окна всё равно видны.
ExecWait '"$INSTDIR\batch.bat" /SILENT'
Но строчка ниже не работает - окна всё равно видны. »
Так читать нужно Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
Вам же выше ответили...есть плаги:
http://nsis.sourceforge.net/ExecCmd_plug-in
http://nsis.sourceforge.net/ExecDos_plug-in »
Либо можете воспользоваться плагином nsExec, его описание есть в нашем справочнике:
Описание плагинов => nsExec: запуск консольных утилит
nsExec::Exec '"$INSTDIR\batch.bat"'
Pop $0
есть через апи код »
Наверное это такой код ? :
Запуск (в данном примере, батника) с скрытым окном консоли
outfile WinExec_test.exe
Section
System::Call 'kernel32.dll::WinExec(t "$EXEDIR\My.bat", i 0) i.r0'
SectionEnd
( циферка в функции i 0 - указывает на стиль отображения/поведения окна. В нашем случае - SW_HIDE = 0
Ессно указываем стиль, необходимый для конкретной задачи)
То, что запуск скрытый и работает, можно легко проверить, использовав, к примеру, My.bat с содержанием
@echo off > TEST_file.txt
После запуска скрипта, по-тихому будет создан файл TEST_file.txt
То же самое можно сделать так :
System::Call 'shell32::ShellExecuteA(i 0, t "Open", t "My.bat", i 0, t "$EXEDIR", i 0) i r1'
MKN, а этот способ:
System::Call 'kernel32.dll::WinExec(t "$EXEDIR\My.bat", i 0) i.r0'
Запуск с ожиданием завершения или нет?
Задача №2: проверить домен на доступность.
Реализация: ?
Запуск с ожиданием завершения или нет? »
Нет, ожидание в этой функции (в чистом виде) не предусмотрено...
Про проверку доступности домена , не знаю... Что конкретно ("технически") предполагается проверять ?
А какое отличие ansi проекта от unicode?
kotkovets, в Unicode проекте не правильно работает WinVer2.nsh как минимум на Windows XP, nsis 3.0b0
AlekseyPopovv
10-06-2014, 11:49
Как привязать реестр к выбору языка?
!include "MUI.nsh"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "English"
WriteRegStr HKCU "Software\QWERTY" "Language" "Russian"
WriteRegStr HKCU "Software\QWERTY" "Language" "Ukrainian"
Как привязать реестр к выбору языка? »
А что именно привязать ? Обычно делают типа такого :
;Remember the installer language
!define MUI_LANGDLL_REGISTRY_ROOT HKLM
!define MUI_LANGDLL_REGISTRY_KEY "Software\App\Option"
!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
;!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
ReadRegStr $R0 HKLM "Software\App\Option" "InstallerLanguage"
StrCmp $R0 "1049" RussianLanguage
StrCmp $R0 "1033" EnglishLanguage
AlekseyPopovv
10-06-2014, 14:24
Я пишу скрипт для портативной программы. Мне нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса. Какой язык пользователь выберет, тот параметр реестра должен прописаться.
нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса. Какой язык пользователь выберет, тот параметр реестра должен прописаться. »
Тогда вообще просто, если выбран язык такой то - делаем то то (пишем в реестр и т.д.). Наводка в коде : http://nsis.sourceforge.net/Examples/languages.nsi
или со своим сообщением
http://stackoverflow.com/questions/14305761/nsis-use-selected-language-for-messagebox-in-oninit-mui2
или делаем свою страничку с выбором языка и последующей логикой
Мне нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса »
Пишите сразу, что у вас уже есть в коде, чего нет, чтобы у вас не переспрашивали и не писали лишнюю инфу
Для начала нужно подключить нужные вам языки командами с указанием языков, например для русского и для английского:
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "English"
Затем, в функции .onInit вам необходимо прописать следующую команду, чтобы пользователю был показан диалог выбора языка:
!insertmacro MUI_LANGDLL_DISPLAY
Какой язык пользователь выберет »
ID выбранного языка (обратите внимание, ID, а не имя языка) хранится в переменной $Language
Какой ID соответствует конкретному языку, можно посмотреть в файле языка по пути (пример файла русского языка):
\Program Files\NSIS\contrib\Language files\Russian.nlf
В начале файла увидите примерно такое содержимое:
# Header, don't edit
NLF v6
# Language ID
1049
# Font and size - dash (-) means default
-
-
Можно завести отдельную переменную и вручную назначить имя языка в зависимости от ID, пример:
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык (ID): $Language"
Var /global Lang
StrCmp $Language "1049" 0 +2
StrCpy $Lang "Russian"
StrCmp $Language "1033" 0 +2
StrCpy $Lang "English"
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык: $Lang"
quit
FunctionEnd
Полный код:
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Моя программа"
!define PRODUCT_PUBLISHER "Моя компания, LLC."
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
!insertmacro MUI_PAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "English"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$TEMP"
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык (ID): $Language"
Var /global Lang
StrCmp $Language "1049" 0 +2
StrCpy $Lang "Russian"
StrCmp $Language "1033" 0 +2
StrCpy $Lang "English"
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык: $Lang"
quit
FunctionEnd
Section "MainSection" SEC01
SectionEnd
AlekseyPopovv
10-06-2014, 16:39
K.A.V., вот что получилось:http://i.imgur.com/m1wYRKA.jpg http://i.imgur.com/YEeGu4k.jpg
Прога не запустилась. Что ещё необходимо? Ваш код вставил полностью.
AlekseyPopovv,
Попробуй предельно упрощённый код :
OutFile "Select LANG_ID.exe"
!include MUI2.nsh
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
StrCpy $R9 $language
MessageBox MB_OK "ID выбранного языка : $R9"
FunctionEnd
Section
SectionEnd
AlekseyPopovv
10-06-2014, 16:53
MKN, тоже самое почти, но программа уже запустилась.
Надо создать как то эту страничку, а как понятия не имею.
Прога не запустилась. Что ещё необходимо? Ваш код вставил полностью. »
Прочитать Справочник по NSIS (http://forum.oszone.net/thread-168287.html) необходимо, вам за вас писать тут ничего не будет, если сами не имеете желания познавать NSIS
Когда будете понимать значение команд и что в них написано (как в моём примере команда закрытия инсталлятора, т.к. это всего-лишь пример)
А что вам ещё необходимо от этого примера? Я дал вам пример кода и предоставил вам информацию, по аналогии которой можете сделать связь других языков с их ID...
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык (ID): $Language"
Var /global Lang
StrCmp $Language "1049" 0 +2
StrCpy $Lang "Russian"
StrCmp $Language "1033" 0 +2
StrCpy $Lang "English"
MessageBox MB_OK|MB_ICONINFORMATION "Выбран язык: $Lang"
quit
FunctionEnd
quit - команда закрытия инсталлятора
может, так всегда новичков проверять, читали они справочник перед заходом в эту тему или нет? :biggrin:
тогда и перестаните писать подобные предложения
Прога не запустилась »
Озадачился вроде как простым вопросом - как на кастомной странице изменить цвет текста в поле чекбокса ?
(${NSD_CreateCheckbox} 25u 80u 150u 10u "цвет текста")
Через SetCtlColors меняется почему то только цвет фона, на котором находится текст... И с прозрачностью пробовал играться... Без результата.
(Можно конечно рядом с чекбоксом просто поместить цветную Label-надпись, но это как то не правильно...)
Или я что то не так делаю ?
Или я что то не так делаю ? »
У меня точно такой же вопрос вставал уже давно, я его не решил тогда, тупо было лень заморачиваться и парить мозг...
Даже в инсталле моего SFX Creator уже давно сделано так, как ты написал...
рядом с чекбоксом просто поместить цветную Label-надпись »
Может, можно как-то с WinAPI поиграться, dll и т.д., но...делать это вряд ли опять же кто-то захочет, разве что истинный программер на api набросает код :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC