Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Ближе к цели будет отфильтровать пользователей по наличию профиля
Скрытый текст
Код: Выделить весь код
!define CountUsersR `!insertmacro CountUsersR `
!macro  CountUsersR outVar
  Push $0
  Push $1
  Push $2
  Push $3

  StrCpy $0 ''
  StrCpy $1 -1
  ${Do}
    IntOp $1 $1 + 1
    EnumRegKey $2 HKLM 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' $1
    ${IfThen} $2 == '' ${|} ${ExitDo} ${|}
    StrCpy $3 $2 8
    ${IfThen} $3 == 'S-1-5-21' ${|} IntOp $0 $0 + 1 ${|}
  ${Loop}

  Pop $3
  Pop $2
  Pop $1
  Exch $0

  Pop ${outVar}
!macroend
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:29, 20-09-2023 | #2791



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


iglezz,
Да. Работает корректно. Даже учетку "Администратор" , которую я когда то активировал на восьмерке сосчитало (это та, что S-1-5-21......................500 и которой нету в HKU).
Огромнейшее спасибо.

Отправлено: 19:22, 20-09-2023 | #2792


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


В HKEY_USERS находятся вошедшие пользователи и системные учётки (System, LocalService, NetworkService), от лица которых запущена пачка процессов/сервисов.

Стоит ещё помнить, что
HKEY_CURRENT_USER - отображение HKEY_USERS\<SID текущего пользователя>
HKEY_CURRENT_USER\Software\Classes - отображение HKEY_USERS\<SID текущего пользователя>_Classes
HKEY_CLASSES_ROOT - объединённое отображение HKEY_CURRENT_USER\Software\Classes и HKEY_LOCAL_MACHINE\Software\Classes

перечисление пользователей с помощью NetQueryDisplayInformation
Код: Выделить весь код
!include EnumUsersRegEx.nsh

RequestExecutionLevel user
ShowInstDetails show
; SetFont 'Fira Code Retina' 9
SetFont 'Consolas' 9
InstallColors /windows
; ChangeUI all "${MYNSISDIREXAMPLES}\Contrib\UIs\largelog.exe"

; https://learn.microsoft.com/en-us/windows/win32/secauthz/well-known-sids
; https://learn.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netquerydisplayinformation
; https://learn.microsoft.com/en-us/windows/win32/api/lmaccess/ns-lmaccess-net_display_user
; https://learn.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netusergetinfo

!define GetUserSID `!insertmacro GetUserSID `
!macro  GetUserSID outSID username
  ${If} '${username}' != ''
    Push '${username}'
    Exch $0 ; [in] username / [out] outSID
    Push $1 ; SID struct

    System::Call "*(&t${NSIS_MAX_STRLEN})p.r1"
    System::Call 'advapi32::LookupAccountName(t,t,p,*i,t,*i,*i)i (n,r0,r1,${NSIS_MAX_STRLEN},n,${NSIS_MAX_STRLEN},n).r0'

    ${If} $0 != 0
      System::Call 'advapi32::ConvertSidToStringSid(p,*t) (r1,.r0)'
    ${Else}
      StrCpy $0 ''
    ${EndIf}

    System::Free $1

    Pop $1
    Exch $0
    Pop ${outSID}
  ${Else}
    StrCpy ${outSID} ''
  ${EndIf}
!macroend

/* NET_DISPLAY_USER.usri1_flags flags:
  UF_SCRIPT=0x0001
  UF_ACCOUNTDISABLE=0x0002
  UF_PASSWD_NOTREQD=0x0020
  UF_NORMAL_ACCOUNT=0x0200
  UF_DONT_EXPIRE_PASSWD=0x10000

  UF_ACCOUNT_TYPE_MASK=UF_TEMP_DUPLICATE_ACCOUNT|UF_NORMAL_ACCOUNT|UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT
  UF_DONT_REQUIRE_PREAUTH=0x400000
  UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED=0x0080
  UF_HOMEDIR_REQUIRED=0x0008
  UF_INTERDOMAIN_TRUST_ACCOUNT=0x0800
  UF_LOCKOUT=0x0010
  UF_MACHINE_ACCOUNT_MASK=UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT
  UF_MNS_LOGON_ACCOUNT=0x20000
  UF_NOT_DELEGATED=0x100000
  UF_NO_AUTH_DATA_REQUIRED=0x2000000
  UF_PARTIAL_SECRETS_ACCOUNT=0x4000000
  UF_PASSWD_CANT_CHANGE=0x0040
  UF_PASSWORD_EXPIRED=0x800000
  UF_SERVER_TRUST_ACCOUNT=0x2000
  UF_SETTABLE_BITS=UF_SCRIPT|UF_ACCOUNTDISABLE|UF_LOCKOUT|UF_HOMEDIR_REQUIRED|UF_PASSWD_NOTREQD|UF_PASSWD_CANT_CHANGE|UF_ACCOUNT_TYPE_MASK|UF_DONT_EXPIRE_PASSWD|UF_MNS_LOGON_ACCOUNT|UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED|UF_SMARTCARD_REQUIRED|UF_TRUSTED_FOR_DELEGATION|UF_NOT_DELEGATED|UF_USE_DES_KEY_ONLY|UF_DONT_REQUIRE_PREAUTH|UF_PASSWORD_EXPIRED|UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION|UF_NO_AUTH_DATA_REQUIRED|UF_USE_AES_KEYS|
  UF_SMARTCARD_REQUIRED=0x40000
  UF_TEMP_DUPLICATE_ACCOUNT=0x0100
  UF_TRUSTED_FOR_DELEGATION=0x80000
  UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION=0x1000000
  UF_USE_AES_KEYS=0x8000000
  UF_USE_DES_KEY_ONLY=0x200000
  UF_WORKSTATION_TRUST_ACCOUNT=0x1000
*/
!define CountUsersQ `!insertmacro CountUsersQ - `
!define PrintUsersQ `!insertmacro CountUsersQ show `
!macro  CountUsersQ showinfo outVar
  Push $0 ; [out] result
  Push $1 ; number of struct_NET_DISPLAY_USER entries
  Push $2 ; pointer to first struct_NET_DISPLAY_USER entry
  Push $3 ; tmp
  Push $4 ; username
  Push $5 ;
  Push $6 ;
  Push $7 ;
  Push $8 ;
  Push $9 ;
  Push $R0

  StrCpy $0 0
  StrCpy $R0 ''

  System::Call "netapi32::NetQueryDisplayInformation(tn,i1,i0,i-1,i${NSIS_MAX_STRLEN},*i.r1,*i.r2)i.r3"

  ${If} $3 = 0
    ${For} $3 1 $1
      System::Call "*$2(t.r4,t,i.r5,t.r6,i,i)"
      ${GetUserSID} $9 $4
      ${EnumUsersRegEx_GetProfilePath} $8 $9

      !if '${showinfo}' == 'show'
      DetailPrint 'SID::: $9'
      IntFmt $5 0x%08X $5
      StrCpy $R0 'FLAGS: $5'
      IntOp $7 $5 & 0x0002 ; UF_ACCOUNTDISABLE
      StrCmp $7 0 +2
      StrCpy $R0 '$R0 DISABLED'

      DetailPrint $R0
      DetailPrint 'NAME:: $4 ($6)'
      DetailPrint 'PROF:: [$8]'
      DetailPrint ''
      !endif

      StrCmp $8 '' +2
      IntOp $0 $0 + 1

      IntOp $2 $2 + 24 ; move ptr to next struct in buffer
    ${Next}
    System::Call "netapi32::NetApiBufferFree(i) (r2)"
  ${EndIf}

  Pop $R0
  Pop $9
  Pop $8
  Pop $7
  Pop $6
  Pop $5
  Pop $4
  Pop $3
  Pop $2
  Pop $1
  Exch $0

  Pop ${outVar}
!macroend

Section CountUsers
  ${PrintUsersQ} $0
SectionEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:33, 20-09-2023 | #2793


Аватара для AlekseyPopovv

Старожил


Сообщения: 169
Благодарности: 6

Профиль | Отправить PM | Цитировать


Ярлыки добавляю в меню пуск:
Код: Выделить весь код
SetShellVarContext all
RMDir /r "$SMPROGRAMS\${APPNAME}"
CreateDirectory "$SMPROGRAMS\${APPNAME}"
CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\${APPEXE}"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Удалить.lnk" "$INSTDIR\uninstall.exe"
${RefreshShellIcons}
После установки ярлыки находятся в папке ${APPNAME}, через пару минут остаётся только один ярлык "$SMPROGRAMS\${APPNAME}.lnk"
Хотя в папке "C:\ProgramData\Microsoft\Windows\Start Menu\Programs" присутствует и папка ${APPNAME} и ярлыки ${APPNAME}.lnk и Удалить.lnk
В чём проблема?

Отправлено: 17:29, 24-09-2023 | #2794


Аватара для AlekseyPopovv

Старожил


Сообщения: 169
Благодарности: 6

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis3-uninstall.ico"
Как сделать что бы в панели управления была другая иконка?

Отправлено: 17:55, 24-09-2023 | #2795


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Цитата AlekseyPopovv:
После установки ярлыки находятся в папке ${APPNAME}, через пару минут остаётся только один ярлык "$SMPROGRAMS\${APPNAME}.lnk"
Хотя в папке "C:\ProgramData\Microsoft\Windows\Start Menu\Programs" присутствует и папка ${APPNAME} и ярлыки ${APPNAME}.lnk и Удалить.lnk
В чём проблема? »
Это норма для современных виндов - Why does my app’s uninstaller disappear from the Start menu?
Why does my app’s uninstaller disappear from the Start menu?
Цитата:
A customer reported that their installer creates a shortcut on the Start menu called Uninstall Contoso Deluxe, but a few seconds after their installer completes, the Uninstall Contoso Deluxe icon disappears from the Start menu. The main Contoso Deluxe shortcut is still there. What’s going on?

The uninstaller shortcut is removed from the Start menu to reduce clutter. You can uninstall apps from the Apps page in Settings, or from the Programs and Features control panel (formerly known as Add or Remove Programs). You can also get to the uninstaller by right-clicking Contoso Deluxe and selecting Uninstall.

Adding an uninstaller icon to Start menu is triply redundant, and it puts uninstallers in a high-traffic area of the user interface, when users are mostly looking for apps to run, not apps to uninstall.

The uninstaller shortcut is still there, so your uninstaller won’t get confused when it tries to delete the uninstaller shortcut. But the Start menu doesn’t show it.


Цитата AlekseyPopovv:
Как сделать что бы в панели управления была другая иконка? »
Прописать её в uninstall-ключе реестра. Примеры есть в каталоге Examples (makensis.nsi, install-per-user.nsi, install-shared.nsi).
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:33, 24-09-2023 | #2796


Аватара для AlekseyPopovv

Старожил


Сообщения: 169
Благодарности: 6

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png 2023-09-26_182922.png
(30.9 Kb, 10 просмотров)
Тип файла: png 2023-09-26_182956.png
(23.3 Kb, 7 просмотров)

Как сделать как на первом скрине?

Отправлено: 14:32, 26-09-2023 | #2797


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Browse for Folder
Вид и поведение окна настраивается через флаги ulFlags структуры BROWSEINFOW, передаваемой функции SHBrowseForFolderW

Отправлено: 19:54, 26-09-2023 | #2798


Аватара для AlekseyPopovv

Старожил


Сообщения: 169
Благодарности: 6

Профиль | Отправить PM | Цитировать


iglezz, Пример бы посмотреть, самый простой.

Отправлено: 21:36, 26-09-2023 | #2799


Аватара для AlekseyPopovv

Старожил


Сообщения: 169
Благодарности: 6

Профиль | Отправить PM | Цитировать


iglezz,
Код: Выделить весь код
!include "StrFunc.nsh"
${StrRep}

${StrRep} $0 "$INSTDIR" "\" "/"
WriteRegStr HKCU "${APPREG}\OCR" "LanguagesPath" "@ByteArray($0/OCR)"
Как считать путь к папке OCR? Пользователь может выбрать любое расположение папки.

Отправлено: 12:32, 28-09-2023 | #2800



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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




 
Переход