|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
то давно бы Windows на NSIS переписали. ![]() |
|
|
Отправлено: 10:16, 14-03-2015 | #1541 |
|
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Привет народ,
Имеется вопрос.. Ковыряю один инсталлер, формально всё по тех. части оригинального уже воссоздал и прописал что нужно.. Но, не работает как надо только кусок мелкого оформления. Не отображаются тексты на странице Велком и её заголовка.. Пример в картинках: Скрытый текст
Пример кода..
;===============================================================================
;Modification Development Kit Setup Script
;===============================================================================
; Conditional Compilation
; !define MDK_SMALL ; exclude stuff
!define MDK_COLOR ; modified NSIS
; !define MOD_INCLUDE_PLAYERKIT
; Compiler Settings
CRCCheck force
SetCompressor lzma
!ifdef G2MDK_SMALL
SetCompressorDictSize 128 ; see RAM table
!else
SetCompressorDictSize 32 ; see RAM table
!endif
; DictSize Compress Decompress
; 8 MB 141 MB 10 MB (default)
; 12 MB 179 MB 14 MB
; 16 MB 217 MB 18 MB
; 24 MB 293 MB 26 MB
; 32 MB 369 MB 35 MB
; 48 MB 521 MB 50 MB
; 64 MB 673 MB 66 MB
; 96 MB 977 MB 98 MB
; 128 MB 1281 MB 130 MB
; 192 MB 1889 MB 194 MB
AllowRootDirInstall true
!ifdef G2MDK_SMALL
!packhdr "packhdr.tmp" "upx --best packhdr.tmp"
!endif
; Includes
!include "MUI.nsh"
!include "Sections.nsh"
!include ".\setup\g2mod.nsh"
; Version Definitions
!define VER_MAJOR 0
!define VER_MINOR 0
!define VER_PATCH 0
!define VER_FLAGS 0
!define VER_TEXT "${VER_MAJOR}.${VER_MINOR}"
!ifndef G2MDK_SMALL
!define VER_FILE "${VER_MAJOR}.${VER_MINOR}"
!else
!define VER_FILE "${VER_MAJOR}.${VER_MINOR}"
!endif
!define NAME_LONG "Modification Development Kit"
!define UNREG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\MDK"
OutFile "..."
InstallDir "..."
InstallDirRegKey HKLM "..."
;===============================================================================
; MUI
Name "G2MDK ${VER_TEXT}"
;BrandingText "${NAME_LONG}"
;LicenseForceSelection radiobuttons
; Configuration (all)
!ifdef MDK_COLOR
!define MUI_BGCOLOR "000000"
!define MUI_TEXTCOLOR "CDCBEB"
!define MUI_FINISHPAGE_LINK_COLOR "0xFDF8F8"
!endif
!define MUI_ICON ".ico"
!define MUI_UNICON ".ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADERIMAGE_BITMAP ".bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP ".bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP ".bmp"
; Configuration (Installer)
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TEXT "Dieser Assistent wird Sie durch die Installation \
von MDK (${NAME_LONG}) begleiten.\r\n\r\nEs wird empfohlen vor der \
Installation alle anderen Programme zu schlieЯen.\r\n\r\n$_CLICK"
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_FINISHPAGE_LINK "..."
!define MUI_FINISHPAGE_LINK_LOCATION "..."
; Setup Pages (Installer)
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE ".rtf"
Page custom PageReinstall PageLeaveReinstall
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; Configuration (Uninstaller)
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TEXT "Dieser Assistent wird Sie durch die \
Deinstallation von GMDK (${NAME_LONG}) begleiten.\r\n\r\n\
Bitte beenden Sie alle MDK-Tools,\r\n\
bevor Sie mit der Deinstallation fortfahren.\r\n\r\n$_CLICK"
!define MUI_FINISHPAGE_TITLE_3LINES
; Setup Pages (Uninstaller)
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; Setup Language
!insertmacro MUI_LANGUAGE "German"
; Reserve Files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
...
Код восстанавливал изучая оригинал(написан на базе Нсиськи 2.0), сам использую Нсис юникод 2.46.5. Компилил как в Анси, так и в Юнике, и взде одинаково, - текст не отображается.. В чем грабля может быть ?! ![]() |
|
Отправлено: 07:48, 15-03-2015 | #1542 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MaGoth:
Цитата MaGoth:
Цитата MaGoth:
MUI_BGCOLOR есть, а вот MUI_TEXTCOLOR нет, соответственно, цвет на фон то применяется, а на текст - нет Пишите свою функцию с установкой цветов на тексты командой SetCtlColors, либо ковыряйте include файл интерфейса и добавляйте такую дефиньку, чтобы применяла цвета на текст |
|||
|
------- Последний раз редактировалось K.A.V., 15-03-2015 в 11:00. Отправлено: 10:54, 15-03-2015 | #1543 |
|
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать K.A.V.,
Не напомнишь случаем хенделы этих текстовых полей и окна..? Ковырял ковырял интерфес, но что-то кроме как изменения цвета фона в них, ничего более не наковырял. Может ковырялка не того калибра ?! Да и залезть в ресурсы интерфейса пока нет возможности... |
|
Отправлено: 08:39, 20-03-2015 | #1544 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MaGoth:
Цитата K.A.V.:
в котором прописаны все детали интерфейса, установка цветов, текста, изображений и т.д. Цитата MaGoth:
В своём коде замените ваши куски этими: !define MUI_PAGE_CUSTOMFUNCTION_SHOW "WelcomeFinishColors_K.A.V._Example" ; Setup Pages (Installer) !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE ".rtf" Page custom PageReinstall PageLeaveReinstall !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !define MUI_PAGE_CUSTOMFUNCTION_SHOW "WelcomeFinishColors_K.A.V._Example" !insertmacro MUI_PAGE_FINISH ; Setup Pages (Uninstaller) !define MUI_PAGE_CUSTOMFUNCTION_SHOW "un.WelcomeFinishColors_K.A.V._Example" !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES !define MUI_PAGE_CUSTOMFUNCTION_SHOW "un.WelcomeFinishColors_K.A.V._Example" !insertmacro MUI_UNPAGE_FINISH И ещё обратите внимание на то, что необходимо использовать 2 разные функции для установщика и деинсталлятора сами функции Function WelcomeFinishColors_K.A.V._Example
ReadINIStr $0 "$PLUGINSDIR\ioSpecial.ini" "Field 2" "HWND"
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
ReadINIStr $0 "$PLUGINSDIR\ioSpecial.ini" "Field 3" "HWND"
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
GetDlgItem $0 $HWNDPARENT 1037
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
GetDlgItem $0 $HWNDPARENT 1038
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
FunctionEnd
Function un.WelcomeFinishColors_K.A.V._Example
ReadINIStr $0 "$PLUGINSDIR\ioSpecial.ini" "Field 2" "HWND"
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
ReadINIStr $0 "$PLUGINSDIR\ioSpecial.ini" "Field 3" "HWND"
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
GetDlgItem $0 $HWNDPARENT 1037
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
GetDlgItem $0 $HWNDPARENT 1038
SetCtlColors $0 ${MUI_TEXTCOLOR} ${MUI_BGCOLOR}
FunctionEnd
|
|||
|
------- Отправлено: 12:19, 20-03-2015 | #1545 |
|
Старожил Сообщения: 152
|
Профиль | Отправить PM | Цитировать Как определить за NAT находится пк или нет с помощью NSIS?
|
|
Отправлено: 12:06, 30-03-2015 | #1546 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Limonica:
Я, например, не шарю в сетевых технологиях и чтобы понять, чего вы действительно хотите от кода - я перед написанием кода должен проштудировать документацию относительно вашего вопроса и только после этого понять, какой функционал необходим в коде Если готового плагина/решения нет на сайте NSIS - то я должен буду сначала понять, что такое NAT и понять, что нужно для того, чтобы приступить к написанию кода к определению за NAT/не за NAT, а это дополнительное потраченное время, лично для меня это время будет потрачено зря, т.к. мне эта тема не интересна Так вот что хотелось бы сказать в итоге (и, думаю, нужно внести эти "пожелания-инструкции" в шапку в каком-нибудь более понятном формате, если я не очень грамотно выражусь сейчас): Если вы просите помощи в написании кода, описывайте подробно, какие команды необходимо видеть в коде, т.к. не все мы тут супер-мега-опытные-знающие всё обо всём в мире IT, сократите время ожидания кода себе и уважайте время тех, кто вам помогает. Например, по вашему вопросу можно было бы составить сообщение типа такого (опять же, если я всё правильно понял про NAT, прочитав инфу в инете): Скрытый текст
Как определить за NAT находится пк или нет с помощью NSIS? Если готового решения нет, то необходим следующий функционал: 1. Определить IP адрес локальной машины 2. Определить, входит ли этот адрес в диапазоны локальных зарезервированных сетей типа 192.168.255.255, 10.255.255.255 и бла бла бла перечисляем дальше Т.е. по сути, нам что нужно, определить это? Если IP адрес компьютера входит в диапазон локальных сетей, то мы за NAT? Если я всё правильно понял, то можно реализовать так (или не так, если я всё-таки нифига не понял ):В любом случае, может быть, код кому-нибудь пригодится, если это не решение вашего вопроса) Name "GetIP Test"
OutFile "GetIP Test.exe"
Function .onInit
call GetIP
quit
FunctionEnd
Function GetIP
System::Alloc 400
pop $R0
System::Call 'ws2_32::WSAStartup(i 0x202, i R0)'
System::Call 'ws2_32::gethostname(t .r0, i ${NSIS_MAX_STRLEN}) i .r1'
System::Call 'ws2_32::gethostbyname(t "$0") i.R1'
System::Call '*$R1(&v12,*i.R2)'
System::Call '*$R2(i.R3)'
System::Call 'ws2_32::inet_ntoa(i R3) t.R4'
System::Call 'ws2_32::WSACleanup()'
System::Free $R0
; $0 - имя хоста
; $R4 - IP адрес
Push '$R4'
Call CheckIP
Pop $0
; в $0 результат, смотрим инфу ниже:
; 1 - LoopBack IP (localhost, indicates no connection to a LAN or to the internet).
; 2 - Automatic Private IP Address (no DHCP server).
; 3 - Network IP.
; 4 - Internet IP.
StrCpy $1 "Мы за NAT"
StrCmp $0 "4" 0 +2
StrCpy $1 "Мы не за NAT"
MessageBox MB_OK|MB_ICONINFORMATION "IP - $R4$\noutput - $0$\n$\n$1"
FunctionEnd
Function CheckIP
Exch $0
Push $1
; Check 127.x.x.x
Push '127.0.0.0'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 2 '' Range1 ; IP cannot be in range of LoopBack addresses
Push '127.255.255.255'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 1 LoopBack ; We found a LoopBack IP
; Check 10.x.x.x
Range1:
Push '10.0.0.0'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 2 '' Range2 ; IP cannot be in range 1
Push '10.255.255.255'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 1 LanIp ; We found a LanIp
; Check 172.16.x.x to 172.31.x.x
Range2:
Push '172.16.0.0'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 2 '' Range3 ; IP cannot be in range 2
Push '172.31.255.255'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 1 LanIp ; We found a LanIp
; Check 192.168.x.x
Range3:
Push '192.168.0.0'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 2 '' Range4 ; IP cannot be in range 3
Push '192.168.255.255'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 1 LanIp ; We found a LanIp
; Check 169.254.x.x
Range4:
Push '169.254.0.0'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 2 '' InternetIp ; It should be an internet IP
Push '169.254.255.255'
Push $0
Call VersionCheck
Pop $1
StrCmp $1 1 APA ; We found an Automatic Private IP Address
Goto InternetIp ; Remaining addresses are internet IPs
LoopBack:
StrCpy $1 1
Goto Exit
APA:
StrCpy $1 2
Goto Exit
LanIp:
StrCpy $1 3
Goto Exit
InternetIp:
StrCpy $1 4
Exit:
Exch $1
Exch 1
Exch $0
Exch 1
FunctionEnd
Function VersionCheck
Exch $0 ;second versionnumber
Exch
Exch $1 ;first versionnumber
Push $R0 ;counter for $0
Push $R1 ;counter for $1
Push $3 ;temp char
Push $4 ;temp string for $0
Push $5 ;temp string for $1
StrCpy $R0 "-1"
StrCpy $R1 "-1"
Start:
StrCpy $4 ""
DotLoop0:
IntOp $R0 $R0 + 1
StrCpy $3 $0 1 $R0
StrCmp $3 "" DotFound0
StrCmp $3 "." DotFound0
StrCpy $4 $4$3
Goto DotLoop0
DotFound0:
StrCpy $5 ""
DotLoop1:
IntOp $R1 $R1 + 1
StrCpy $3 $1 1 $R1
StrCmp $3 "" DotFound1
StrCmp $3 "." DotFound1
StrCpy $5 $5$3
Goto DotLoop1
DotFound1:
Strcmp $4 "" 0 Not4
StrCmp $5 "" Equal
Goto Ver2Less
Not4:
StrCmp $5 "" Ver2More
IntCmp $4 $5 Start Ver2Less Ver2More
Equal:
StrCpy $0 "0"
Goto Finish
Ver2Less:
StrCpy $0 "1"
Goto Finish
Ver2More:
StrCpy $0 "2"
Finish:
Pop $5
Pop $4
Pop $3
Pop $R1
Pop $R0
Pop $1
Exch $0
FunctionEnd
Section
SectionEnd
|
|
|
------- Отправлено: 17:21, 30-03-2015 | #1547 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Необходимо переименовать все файлы в папке, чтобы вместо имён была нумерация ( варианты 0,1,2 и т.д. или 01, 02 и т.д. или 001 002 и т.д. ) без расширений
Также интересует выборочное переименование , типа, переимен. начиная с такого то по такой то файл и др сочетания... Использовал такой код : Но почему то получается хаотичное переименование, особенно если много файлов... |
|
Последний раз редактировалось MKN, 31-03-2015 в 17:06. Отправлено: 17:00, 31-03-2015 | #1548 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Function RenameFiles Var /global n StrCpy $n 1 Delete "$TEMP\tmpfile.ini" ClearErrors FindFirst $0 $1 $DESKTOP\D\*.* loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next ReadINIStr $2 "$TEMP\tmpfile.ini" "tmp" "$1" StrCmp $2 "1" next 0 Rename "$DESKTOP\D\$1" "$DESKTOP\D\$n" WriteINIStr "$TEMP\tmpfile.ini" "tmp" "$n" "1" IntOp $n $n + 1 next: FindNext $0 $1 Goto loop done: FindClose $0 Delete "$TEMP\tmpfile.ini" FunctionEnd Цитата MKN:
Соответственно, чтобы сделать этот процесс правильным - нам нужно запоминать, какой файл уже был переименован (чтобы повторно его не обрабатывать), для этого сбрасываем имена переименованных файлов во временный файл и перед каждой командой переименования проверяем наличие записи о текущем файле Ещё один момент, когда перечисляешь все файлы в папке командой Find*, в переменную имени файла сбрасывается значение "." и "..", из-за чего счетчик так же может быть не правильным, проверку на эти значения я так же прописал Ну и ещё один момент - счетчик нужно менять только после операции переименования, а не после/перед командой FindNext, т.к. опять же, счетчик будет не правильным Цитата MKN:
p.s. я бы вообще, сделал всё это дело через функцию Locate (красивее/удобнее), но т.к. она багованная с самого 2.46 и при указании некоторых команд (например ReadINIStr) в callback функцию, она просто завершается - из-за этого этот вариант отпадает ![]() |
||
|
------- Отправлено: 18:31, 31-03-2015 | #1549 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
Наверное такое переименование проще сделать батником. Там это в три строки делается... |
|
|
Последний раз редактировалось MKN, 01-04-2015 в 12:22. Отправлено: 18:44, 31-03-2015 | #1550 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
| [архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
| Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
| Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 | |
|