Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: MaxLab2008
Дата сообщения: 13.03.2009 19:14
...удалено...
Автор: ComradG
Дата сообщения: 16.03.2009 19:44
Victor_VG
Даров! Я тут отсутсвовал, кое-чаво успел пропустить. На статьи, я так понимаю, у тя времени не нашлось? Если нет, то фиг с ним. Я тут в 2.44 баг критичный нашел. Но чтобы его описать поста мало. Одно скажу, что со стеками поаккуратнее.
Автор: Victor_VG
Дата сообщения: 17.03.2009 06:03
ComradG

Угу. Кручусь как заведённый. Насчёт стеков понял.
Автор: MIHMIH007
Дата сообщения: 28.03.2009 14:56
Народ подскажите плз.
У меня от небольшой проги есть файлы и файлы реестра. Знаю что с помощью NSIS можно как то упаковать это всё в один EXE файл, так чтобы при его запуске файлы распаковывались в нужную директорию запускался файл реестра а при выходе из программы снова удалялись. Спасибо
Автор: Victor_VG
Дата сообщения: 28.03.2009 15:06
MIHMIH007

Можно, программу надо написать. Но нет данных, никто и не напишет.
Автор: MIHMIH007
Дата сообщения: 28.03.2009 15:34

Цитата:
Можно, программу надо написать. Но нет данных, никто и не напишет.

Каким образом тогда создают портативные приложения через NSIS ??? или в этом топике никто этим не занимается?
Автор: Victor_VG
Дата сообщения: 28.03.2009 16:15
MIHMIH007

Пишут программы. Но для этого надо знать что написать. Телепатов здесь увы, нет. А так выходит "Хочу то, сам не знаю что. Дайте мне готовое.". Не смешно, потому и ответ такой. Общий.
Автор: iglezz
Дата сообщения: 28.03.2009 17:22
MIHMIH007
на portableapps.com можно подсмотреть как это делается.
в принципе ничего сложного в этом нет, если не требуется очень универсального решения
Автор: Draik
Дата сообщения: 03.04.2009 11:18
Подскажите пожалуйста как сделать в инсталляторе проверку на наличие файла в выбранной пользователем папке для установки? При этом, сама проверка должна осуществляться только после того, как будет нажата кнопка "Установить". Если файл присутствует в этой папке, то установка спокойно продолжится, а если файла нет, то должно появится сообщение о том, что в этой папке нет нужного файла, выберете другую папку...
Суть да дело в том, что у меня дополнение для игры и таким образом должна производиться проверка на наличие игры в выбранной пользователем папке...
Автор: Garrett
Дата сообщения: 03.04.2009 11:30
Draik
Почитай справку, посмотри примеры, ты найдешь всё сам быстрее, чем ждать пока кто-то тебе ответит.
Автор: Draik
Дата сообщения: 03.04.2009 12:05
Garrett. Я не из леса И справку читал.

Но не получается сделать именно так, как я описал...
У меня почему-то проверка осуществляется уже после нажатия кнопки "Обзор" и уведомляет об отсутствии файла. Совсем не в кассу это)
Вот и взываю о помощи у более продвинутых пользователей
Автор: Victor_VG
Дата сообщения: 03.04.2009 13:10
Draik

Это генерируется судя по ввиду диалога в MUI. Язык интерфейса какой?. Наверняка там что-то не дописал. Короче, выложи свой код, можно в личку. Так подсказать с ходу сложно, но как я понимаю у тебя используется один язык установки - английский, все его сообщения при сборке программы не компилируются в ресурсную библиотеку содержащую скрипт, а берутся из кода программы установщика - они туда "вшиты" на уровне исходников. Используй как я сказал выше MUI, как минимум с двумя языками, и тогда он сам подключит необходимые макросы и библиотеки языковой поддержки. Иначе тебе придётся весь это код писать вручную, а это значит возможность сделать лишние ошибки и возня с отладкой. А оно тебе в таком виде надо?

Проверка наличия файла делается элементарно - используем проверку IfFileExists "$INSTDIR\myfile" lbl_if_exists lbl_if_not_exists

Далее если файл существует переходим на ветку алгоритма lbl_if_exists, иначе обрабатываем ситуацию "не существует" по метке lbl_if_not_exists, например выдаём диагностическое сообщение конструкцией вида (при условии использования MUI):

Код:
Section /o -check
IfFileExists "$INSTDIR\myfile" lbl_exists
StrCmp $LANGUAGE 1049 +2
MessageBox MB_ICONSTOP|MB_OK "Required file ... not found, installation is aborted." IDOK +2
MessageBox MB_ICONSTOP|MB_OK "Необходимый для работы программы файл .... не найден, установка прервана." IDOK +1
Quit
lbl_exists:
SectionEnd
Автор: Draik
Дата сообщения: 03.04.2009 15:50
Victor_VG.

Спасибо за эдакий ликбез)

Вон оно как всё непросто, оказывается.
Тут, что называется, без пол-литра не разберешься.

Язык у меня русский прописан в скрипте. Поэтому всё по-русски. Всё таки для соотечественников патч делаю. А они ни по-английски, ни по-французски не ля ля бужур совсем))
вот так вобщем:
!insertmacro MUI_LANGUAGE "Russian"

Насчёт проверки файла:
Я вот только до такого додумался...

Function .onVerifyInstDir
IfFileExists $INSTDIR\game.exe
MessageBox MB_RETRYCANCEL "В выбранном Вами каталоге отсутствуют компоненты игры. Выберете другой каталог и нажмите <Повтор>." IDRETRY -1 IDCANCEL 0
FunctionEnd

Это не совсем то что нужно, но всё равно ж не работает))
Вот эту хрень прописываю в начале скрипта, в итоге када тока нажимаю кнопку "Обзор", чтоб выбрать папку, то не успеваю я ее выбрать, как мне уже говорится что файло не найдено.

Мне же нужно так. Подробно объясняю:
1. Юзверь такой запускает инсталлятор.
2. Доходит до выбора папки установки.
3. Выбирает папку, нажимает кнопку "Установить"
4. И вот уже после этого, если файл найден, то установка начнётся как ни в чём не бывало без всяких всплывающих сообщений. А если файл не найден, то вылезает уведомление о том, что игра не найдена в выбранной папке. А нажать можно только кнопку ОК и выбрать другую папку. Никакого аборта, то есть прерывания работы инсталлятора быть не должно. Юзверь спокойно должен нажать ОК и выбрать другую папку и усё.

Никаких косяков быть тоже не должно) Меня просто растерзают за каждый глюк)
Либо я делаю эту фичу чётко и без косяков, либо вообще от неё отказываюсь. а отказываца не хоца, т.к штука-то полезная.


Вобщем, Victor_VG, давайте еще чучуть с Вами конструктивно поразмыслим. По крайней мере у Вас это прекрасно получается


Автор: Victor_VG
Дата сообщения: 03.04.2009 21:52
Draik

Зайди ко мне на сайт (ссылка в подписи) там есть полный пакет nsis-244.rar, но хостер требует регистрации. В Обновлении в разделе Examples/NSIS есть его собственный скрипт. Так вот, тебе надо не файлы искать, а считывать путь установки из раздела [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall] или иного места в Реестре где он указан в явном виде и через инструкцию InstallDirRegKey определять путь для установки. А файлы искать уже как признак допустимости, иначе придётся сделать много дополнительных проверок. Иное дело, что разбор строки деинсталляции может оказаться громоздким. Это возможно.
Автор: Draik
Дата сообщения: 04.04.2009 14:17
Не знаю правильно ли я понял, но реестр мне как таковой не нужен.
Игра, на которую патч устанавливается существует в разных версиях - лицензионная, пиратская, причем от разных пиратов. И некоторые версии игры данные о себе в реестр не прописывают. А еще некоторые умники игру просто перекачивают с винта у товарища. Тут тоже ессно никаких данных в реестре не будет. Тем не менее, в скрипте я всё таки прописываю установку по данным реестра, в таком виде (пример):
InstallDirRegKey HKLM "Software\my games\lalala" "Install Dir"

Так вот, если у пользователя игра найдена на компе, то в поле выбора папки уже сразу отобразится путь к папке с игрой и останеца только нажать "Установить", а если по реестру игра не найдётся, то поле выбора папки будет пустым и юзверь вручную укажет путь к игре. То есть путь из реестра я использую вот таким образом.
Иными словами проверка на наличие файлов всё таки нужна. И если юзер укажет не правильную папку, то надо чтоб ему об этом вывелось сообщение.

А деинсталляция не нужна в принципе. И её я даже в скрипте не прописываю. В моём случае смысла в ней нет. Так как патч модифицирует оригинальные файлы игры и удалить их можно только, если снести саму игру. Для этого пользователь воспользуется обычным родным деинсталлятором самой игры.
Автор: Victor_VG
Дата сообщения: 04.04.2009 15:33
Draik

И я в обновлениях деинсталлятор обычно не пишу. Обычно он там по логике вещей не нужен. Тогда можно использовать плугин locate - он есть на офсайте и например у меня в пакете. С его помощью ищем характерные именно для данной программы файлы. Но и в Реестре её следы будут, например в том же [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32] и в других MRU кэшах. Тут надо искать где система эти записи хранит, а потом думать как их оттуда прочитать, и использовать данные пути. Иначе искать замучаешься, особенно коли диски ёмкие.
Автор: Alex Zaguzin
Дата сообщения: 04.04.2009 15:51
Victor_VG - подскажи пожайлуста, чем можно распаковать скрипт инсталлятора NSIS. С инно работал, а с сабжем - никогда практически. Дабы вытащить именно скрипт, а не сами файлы установки. (файлы известны)? Есть такая возможность? Пробовал Universal Extractor 1.6 - распаковывает не всё, и вообще непонятно что....NSIS Unpacker - х.з как подключить к тоталу да и сомневаюсь я насчёт его что-то. Подскажи пожайлуста. Кстати, куда ссылка из шапки на русик пропала? Раньше вроде замечал её там....Заранее спасибо.
Автор: Victor_VG
Дата сообщения: 04.04.2009 16:30
Alex Zaguzin

Используй 7zfm.exe версии 4.65 для распаковки. А вот что касается скрипта, то декомпиллера на него пока нет, во всяком случае я его не знаю. А раз так, то остаётся только визуальный анализ, благо обычно скрипт не зашифрован. А шапку я поправлю.
Автор: Alex Zaguzin
Дата сообщения: 04.04.2009 16:53
Victor_VG - 7z я файлы и распаковывал оттуда. Давно его юзаю....Но вот как происходит проверка файлов на наличие и версии их, а также версии ОС и путей. Эх, блин, буду думать как сделать....
Цитата:
А раз так, то остаётся только визуальный анализ, благо обычно скрипт не зашифрован
- не понял, как так? Или я туплю с вечера опять

Автор: Victor_VG
Дата сообщения: 04.04.2009 19:19
Alex Zaguzin

В скрипте используй или плугины MoreInfo для получения версии + XtInfo для сравнения версий либо использовать функции NSIS - GetDLLVersion и GetDLLVersionLocal, тут придётся использовать более громоздкий код.
Автор: Alex Zaguzin
Дата сообщения: 04.04.2009 19:32
Victor_VG - спасибо за помощь. Буду разбираться с утра (уже пол второго ночи....). Вроде всё просто на первый взгляд.

Я думаю, ты понял, о чём речь. Нужно распаковать инсталлятор обновления проги и собрать его-же, но встроив кряк и ещё кое-что интересное....Ладно, что-нибудь придумаю. Ещё раз сенкс.
Автор: Kilyan
Дата сообщения: 09.04.2009 14:15
Подскажите вот что(желательно с примером):
Каким образом проверить ОС при инсталяции
(если ниже ХР то инсталировать файл gdiplus.dll , если выше то не инсталировать gdiplus.dll)
Голову уже сломал (версию проверял GetVersion - но как ее правильно применить так и не дошло-в этом случае)
ISS это
Source: gdiplus.dll; DestDir: {app}; MinVersion: 4.0.950,0; OnlyBelowVersion: 4.9.3000,0
Автор: Maikl65
Дата сообщения: 22.04.2009 09:56
Подскажите скрипт или плагин для передачи домена, логина и пароля с целью подключения/отключения сетевой папки, из которой нужно запустить программу (т.е. из скрипта временно подключиться (а затем отключиться) к папке другого домена и пользователь этой папки не зарегистрирован на текущем компьютере).
В настоящее время использую консольную команду "NET USE <параметры>" через ExecWait , но, во-первых, при подключении/отключении выскакивает консольное окно (что некрасиво), в во-вторых это в отдельных случаях не работает в доменах.
Автор: Nike000
Дата сообщения: 22.04.2009 10:54
Готового скрипта для NSIS у меня нет, но через System:Call можно сделать с использованием вот ф-ции WNetAddConnection2:

[more=скрипт]
Type NETRESOURCE
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    lpLocalName As String
    lpRemoteName As String
    lpComment As String
    lpProvider As String
End Type

Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
lpNetResource As NETRESOURCE, _
Byval lpPassword As String, _
Byval lpUserName As String, _
Byval dwFlags As Long) As Long

Const ERROR_ACCESS_DENIED = 5
Const ERROR_ALREADY_ASSIGNED = 85
Const ERROR_BAD_DEV_TYPE = 66
Const ERROR_BAD_DEVICE = 1200
Const ERROR_BAD_NET_NAME = 67
Const ERROR_BAD_PROFILE = 1206
Const ERROR_BAD_PROVIDER = 1204
Const ERROR_BUSY = 170
Const ERROR_CANCELLED = 1223
Const ERROR_CANNOT_OPEN_PROFILE = 1205
Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202
Const ERROR_EXTENDED_ERROR = 1208
Const ERROR_INVALID_PASSWORD = 86
Const ERROR_NO_NET_OR_BAD_PATH = 1203
Const ERROR_NO_NETWORK = 1222
Const ERROR_SESSION_CREDENTIAL_CONFLICT = 1219

' sample usage
%REM
Sub Initialize
    On Error Goto errh
    On Error 76 Goto bad_path
    Dim sess As New NotesSession
    Dim doc As NotesDocument
    Set doc = sess.DocumentContext
    Dim res$
    
    Dim pathName As String, fileName As String
    pathName$ = doc.Folder(0)
    
    Print "<br>"
    If doc.User(0) <>"" Then
        res = NetUse(pathName$, doc.User(0), doc.Pass(0))
        If res<>"" Then
            Error 1000," connecting to "+pathName$+"<br>"+res$
        End If
    End If
    
    
    If Right(pathName, 1)= "\" Then pathName = pathName + doc.Mask(0) Else pathName = pathName + "\"+doc.Mask(0)
    
    fileName$ = Dir$(pathName$, 0)
    Do While fileName$ <> ""
        Print fileName$+"<br>"
        fileName$ = Dir$()
    Loop    
    Print "<hr>"
quit:    
    Exit Sub
bad_path:
    Print "<br><br><font color=red><b>Folder '"+pathName$+"' doesn't exists.</b></font>"
    Resume quit
errh:
    Print "<br><br><font color=red><b>Error "+Cstr(Err)+": "+Error$+" in (WQS Dir)/Initialize at line "+Cstr(Erl)+"</b></font>"
    Resume quit
End Sub

[/more]
Автор: ANDY2112
Дата сообщения: 02.05.2009 22:27
Подскажите, пожалуйста, как решить вот какую задачу - нужно вырезать из очень большого файла очень большой кусок и сохранить его в отдельный файл. Размеры и исходного файла и вырезаемого куска порядка нескольких гигабайт. Файлы двоичные.
Автор: SpoinT
Дата сообщения: 10.05.2009 12:22
Как отловить нажатие кнопки в своей форме?
Автор: lrcom
Дата сообщения: 24.05.2009 06:00
NSIS умеет выставлять права на папки? Ситуация:
под вистой в Program Files создается каталог и туда разворачивается некая сборка. В конце инсталляции появляется запрос с предложением запустить установленную программу. Если сказать "да", всё отлично отрабатывает, прога запускается и работает. До закрытия.
Оказывается, виста распознает нсису и при отработке инсталлятора автоматом присваивает ему уровень привилегий admin (соответственно если прогу запустить из-под инсталлятора, то права унаследуются на одну сессию). Дальнейшие попытки запустить программу не из инсталлятора приводят к появлению дебильного для висты запроса "непонятная прога.. чо делать бум? запускать?" А всё потому, что у юзера нет прав на полноценную работу с этим каталогом.
Автор: Hiken
Дата сообщения: 29.05.2009 13:26
Что-то завязло дело с выпуском новых версий. Надеюсь, это оттого, что большой апдейт готовят..
Автор: alroy
Дата сообщения: 29.05.2009 17:37
Нее скорее всего кризис и до них добрался !
Автор: Hiken
Дата сообщения: 02.06.2009 05:42
Великий Nullsoft на пороге разорения? То-то же: надо было развиваться, выпускать новые продукты, а не разгонять разработчиков и продавать бизнес кому-попало.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.