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

kotkovets
21-05-2014, 01:04
Как запустить ExecWait в режиме SILENT? »
в этом плаге, режим зависит от самого приложения... есть через апи код (если нужно, пороюсь выложу)
есть плаги:
http://nsis.sourceforge.net/ExecCmd_plug-in
http://nsis.sourceforge.net/ExecDos_plug-in

MKN
21-05-2014, 11:31
Определение статуса компьютера в сети


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

Awral
21-05-2014, 20:20
в этом плаге, режим зависит от самого приложения... есть через апи код (если нужно, пороюсь выложу) »
Мне нужно запустить .bat файл в тихом (silent) режиме. Когда-то это делал, но сейчас забыл как. Вроде указывал /SILENT. Но строчка ниже не работает - окна всё равно видны.
ExecWait '"$INSTDIR\batch.bat" /SILENT'

K.A.V.
21-05-2014, 21:30
Но строчка ниже не работает - окна всё равно видны. »
Так читать нужно Справочник по 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

MKN
22-05-2014, 16:09
есть через апи код »
Наверное это такой код ? :

Запуск (в данном примере, батника) с скрытым окном консоли

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'

Otlanta
27-05-2014, 22:03
MKN, а этот способ:
System::Call 'kernel32.dll::WinExec(t "$EXEDIR\My.bat", i 0) i.r0'
Запуск с ожиданием завершения или нет?

Задача №2: проверить домен на доступность.
Реализация: ?

MKN
28-05-2014, 10:58
Запуск с ожиданием завершения или нет? »
Нет, ожидание в этой функции (в чистом виде) не предусмотрено...

Про проверку доступности домена , не знаю... Что конкретно ("технически") предполагается проверять ?

Otlanta
29-05-2014, 10:09
А какое отличие ansi проекта от unicode?

Otlanta
29-05-2014, 11:10
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"

MKN
10-06-2014, 13:12
Как привязать реестр к выбору языка? »
А что именно привязать ? Обычно делают типа такого :

;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
Я пишу скрипт для портативной программы. Мне нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса. Какой язык пользователь выберет, тот параметр реестра должен прописаться.

MKN
10-06-2014, 15:11
нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса. Какой язык пользователь выберет, тот параметр реестра должен прописаться. »
Тогда вообще просто, если выбран язык такой то - делаем то то (пишем в реестр и т.д.). Наводка в коде : http://nsis.sourceforge.net/Examples/languages.nsi
или со своим сообщением
http://stackoverflow.com/questions/14305761/nsis-use-selected-language-for-messagebox-in-oninit-mui2
или делаем свою страничку с выбором языка и последующей логикой

K.A.V.
10-06-2014, 15:28
Мне нужно что бы при запуске программы вылазило окошко с выбором языка интерфейса »
Пишите сразу, что у вас уже есть в коде, чего нет, чтобы у вас не переспрашивали и не писали лишнюю инфу

Для начала нужно подключить нужные вам языки командами с указанием языков, например для русского и для английского:

!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
Прога не запустилась. Что ещё необходимо? Ваш код вставил полностью.

MKN
10-06-2014, 16:43
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, тоже самое почти, но программа уже запустилась.
Надо создать как то эту страничку, а как понятия не имею.

K.A.V.
10-06-2014, 17:13
Прога не запустилась. Что ещё необходимо? Ваш код вставил полностью. »
Прочитать Справочник по 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:

тогда и перестаните писать подобные предложения
Прога не запустилась »

MKN
13-06-2014, 17:00
Озадачился вроде как простым вопросом - как на кастомной странице изменить цвет текста в поле чекбокса ?
(${NSD_CreateCheckbox} 25u 80u 150u 10u "цвет текста")
Через SetCtlColors меняется почему то только цвет фона, на котором находится текст... И с прозрачностью пробовал играться... Без результата.
(Можно конечно рядом с чекбоксом просто поместить цветную Label-надпись, но это как то не правильно...)
Или я что то не так делаю ?

K.A.V.
14-06-2014, 18:12
Или я что то не так делаю ? »
У меня точно такой же вопрос вставал уже давно, я его не решил тогда, тупо было лень заморачиваться и парить мозг...

Даже в инсталле моего SFX Creator уже давно сделано так, как ты написал...
рядом с чекбоксом просто поместить цветную Label-надпись »

Может, можно как-то с WinAPI поиграться, dll и т.д., но...делать это вряд ли опять же кто-то захочет, разве что истинный программер на api набросает код :)




© OSzone.net 2001-2012