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

» NSIS (Nullsoft Scriptable Install System)

Автор: Victor_VG
Дата сообщения: 30.07.2013 14:12
Dunkeshu

Возможно и не он сам, но речь именно об авторе сих "художеств". Кстати, эта программка v0.7 когда я её проверил не только закрыла SFX от распаковки, но и часть данных в нём безнадёжно повредила.
Автор: Dunkeshu
Дата сообщения: 30.07.2013 18:02

Цитата:
Возможно и не он сам
http://samforum.ws/showthread.php?t=546&page=7 Google всё знает!
Автор: afinik
Дата сообщения: 27.08.2013 17:25
Друзья, работает ли InetLoad в Unicode NSIS? Мне нужно скачать файл с фтп с авторизацией. В ansi версии скрипт отрабатывает, а тут не скачивает файл.
Автор: Victor_VG
Дата сообщения: 27.08.2013 18:15
afinik

Замена - http://nsis.sourceforge.net/Inetc_plug-in . Это его расширенный вариант. Попробуйте его, этот может и не работать.
Автор: afinik
Дата сообщения: 27.08.2013 18:23
Ммм... Я что-то не нашел в описании авторизациии на фтп. На проксю есть, а вот на фтп...
Автор: Victor_VG
Дата сообщения: 27.08.2013 18:36
afinik

Согласен, бегло глядел. Как решение NsExec: "команда" тому же cURL/FTP/Wget. По моему проще, да и libcur.dlll можно просто через System:: использовать. Мне думается, что сама идея плагина была задумана под конкретную задачу, которая у автора отпала. Я в таких случаях просто зову cURL/Wget благо он у меня вечно есть под руками.
Автор: pycukk
Дата сообщения: 17.09.2013 21:44
Господа, подскажите, реально ли вытащить из установочного пакета, собранного в NSIS, скрипт установки, или нет?
Автор: 820815
Дата сообщения: 17.09.2013 21:55
Нет.
Автор: Victor_VG
Дата сообщения: 17.09.2013 22:37
pycukk

В урезанном варианте после обработки компилятором - да, макролибы, исходники функций, инклюды - нет.
Автор: Limonica
Дата сообщения: 12.10.2013 10:56
Привет, нуждаюсь в помощи. Задача, завершить все процессы в данный момент использующие библиотеку dll, c помощью tasskill выглядит так:

nsExec::exec '"taskkill.exe" /f /fi "modules eq name.dll"'

завершить все процессы в данный момент использующие библиотеку dll не используя утилиту taskkill, то есть силами самого NSIS или плагинов.
Автор: Sanch8
Дата сообщения: 12.10.2013 12:30
Limonica

Ссылка
Автор: Limonica
Дата сообщения: 12.10.2013 12:34
Sanch8
KillProcDLL::KillProc "process_name.exe"

В моей задаче не поможет, имена exe занимающих dll неизвесны, нужен чисто альтернатива

'"taskkill.exe" /f /fi "modules eq name.dll"' на NSIS
Автор: Victor_VG
Дата сообщения: 12.10.2013 18:55
Limonica

Задача решаема плагинами, только чуток иначе - через вызовы System::<WinAPI> по имени DLL ищем её и вызывающий её процесс по его хендлам, а после его уже и прибить тем же NsProcess. С ходу код не напишу - подумать надо, но задача на уровне логики решаема.
Автор: Limonica
Дата сообщения: 12.10.2013 20:12
Victor_VG
Исходники taskkill http://doxygen.reactos.org/dc/d79/taskkill_8c_source.html
Автор: Victor_VG
Дата сообщения: 12.10.2013 20:30
Limonica

Надо бы поглядеть.
Автор: Dunkeshu
Дата сообщения: 15.10.2013 00:00
Limonica

Цитата:
завершить все процессы в данный момент использующие библиотеку dll
IMHO, плохая идея, так как приводит к нарушению стабильности системы! Если возникла потребность подмены какой-то программы (не файла с тем же именем), то логично и правильно совершить, например подмену ассоциаций
Автор: Victor_VG
Дата сообщения: 15.10.2013 00:32
Dunkeshu

Это один вариант, но более грамотное решение задачи замены DLL указано в MSDN:

Цитата:
Путь поиска, используемый Windows для обнаружения библиотеки DLL (http://msdn.microsoft.com/ru-ru/library/7d83bc18.aspx)

Используя механизмы явного и неявного связывания, Windows сначала выполняет поиск "известных библиотек DLL", таких как Kernel32.dll и User32.dll. Затем Windows выполняет поиск библиотек DLL в следующей последовательности:

1) Каталог, в котором находится исполняемый модуль текущего процесса.
2) Текущий каталог.
3) Системный каталог Windows. Путь к этому каталогу извлекается с помощью функции GetSystemDirectory.
4) Каталог Windows. Путь к этому каталогу извлекается с помощью функции GetWindowsDirectory.
5) Каталоги, указанные в переменной среды PATH.

Примечание

Переменная среды LIBPATH не используется.

при этом допустимо наличие в системе различных версий DLL требуемых приложениями, и единственное ограничение налагаемое на них это их соответствие текущей реализации WinAPI в части импортируемых ими функций (секция .Import модуля) - они должны быть реализованы в данной версии WinAPI т.е. их вызов не должен завершаться ответом nul (функция не реализована и вместо неё стоит заглушка) или Entry_Point_Not_Faund (функция не существует).
Автор: afinik
Дата сообщения: 21.10.2013 11:56
Друзья, ситуация такая:


Код:     
!include nsDialogs.nsh
!include LogicLib.nsh
!include zipdll.nsh
!include MUI2.nsh
!include NSISArray.nsh

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Name "Формирование установочных файлов -"
OutFile testik.exe

XPStyle on

Var Dialog
Var Label1
Var Label2

Page custom Test0 Test0Leave
Page custom Test1 Test1Leave
Page custom Test2 Test2Leave
Page instfiles

Function Test0
    nsDialogs::Create 1018
    
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    ${NSD_CreateLabel} 0 0 100% 12u "Тестирование №0"
    Pop $Label1
    ${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
    Pop $Label2
    ${NSD_CreateText} 0 25u 100% 13u "1"
    Pop $R4
    
    nsDialogs::Show

FunctionEnd

Function Test0Leave
    ${NSD_GetText} $R4 $R4
    MessageBox MB_OK "R4=$R4" ;выдает R4=1
FunctionEnd

Function Test1
    nsDialogs::Create 1018
        
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    nsDialogs::Show
FunctionEnd

Function Test1Leave
${NSD_GetText} $R4 $R4
FunctionEnd

Function Test2

    nsDialogs::Create 1018
    
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    nsDialogs::Show

FunctionEnd

Function Test2Leave
    ${NSD_GetText} $R4 $R4
    MessageBox MB_OK "R4=$R4" ;выдает R4=
FunctionEnd

Section
SectionEnd
Автор: Sanch8
Дата сообщения: 21.10.2013 12:44
afinik
Скрипт бредовый, вы создаёте страницу с пустой переменной в функции Test2.
Надо делать по аналогии Test0:

Код: !include nsDialogs.nsh
!include LogicLib.nsh
!include zipdll.nsh
!include MUI2.nsh
!include NSISArray.nsh

;!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Name "Формирование установочных файлов -"
OutFile testik.exe

XPStyle on

Var Dialog
Var Label1
Var Label2

Page custom Test0 Test0Leave
Page custom Test1 Test1Leave
Page custom Test2 Test2Leave
Page instfiles

Function Test0
nsDialogs::Create 1018

Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}

${NSD_CreateLabel} 0 0 100% 12u "Тестирование №0"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "1"
Pop $R4

nsDialogs::Show

FunctionEnd

Function Test0Leave
${NSD_GetText} $R4 $R4
MessageBox MB_OK "R4=$R4"
FunctionEnd

Function Test1
nsDialogs::Create 1018

Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
        
        ${NSD_CreateLabel} 0 0 100% 12u "Тестирование №2"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "2"
Pop $R4

nsDialogs::Show
FunctionEnd

Function Test1Leave
${NSD_GetText} $R4 $R4
MessageBox MB_OK "R4=$R4"
FunctionEnd

Function Test2

nsDialogs::Create 1018

Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
        
        ${NSD_CreateLabel} 0 0 100% 12u "Тестирование №3"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "3"
Pop $R4

nsDialogs::Show

FunctionEnd

Function Test2Leave
${NSD_GetText} $R4 $R4
MessageBox MB_OK "R4=$R4"
FunctionEnd

Section
SectionEnd
Автор: afinik
Дата сообщения: 21.10.2013 12:50
Sanch8, проблема в том, что мой скрипт - это рыба. Как вы - я могу. А вот получить значение $R4 в Test2Leave, заданное в Test0 - вот это не могу.

Добавлено:
Sanch8
Спасибо, разобрался. Лишние Gettext поставил...


Код:
    
!include nsDialogs.nsh
!include LogicLib.nsh
!include zipdll.nsh
!include MUI2.nsh
!include NSISArray.nsh

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Name "Формирование установочных файлов -"
OutFile testik.exe

XPStyle on

Var Dialog
Var Label1
Var Label2

Page custom Test0 Test0Leave
Page custom Test1 Test1Leave
Page custom Test2 Test2Leave
Page instfiles

Function Test0
    nsDialogs::Create 1018
    
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    ${NSD_CreateLabel} 0 0 100% 12u "Тестирование №0"
    Pop $Label1
    ${NSD_CreateLabel} 0 13u 100% 12u "Задаем количество менеджерских"
    Pop $Label2
    ${NSD_CreateText} 0 25u 100% 13u "1"
    Pop $9
    
    nsDialogs::Show

FunctionEnd

Function Test0Leave
    ${NSD_GetText} $9 $9
    MessageBox MB_OK "Переменная=$9" ;выдает Переменная=1
FunctionEnd

Function Test1
    nsDialogs::Create 1018
        
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    nsDialogs::Show
FunctionEnd

Function Test1Leave
;${NSD_GetText} $9 $9
FunctionEnd

Function Test2

    nsDialogs::Create 1018
    
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    
    nsDialogs::Show

FunctionEnd

Function Test2Leave
    ;${NSD_GetText} $9 $9
    MessageBox MB_OK "Переменная=$9" ;выдает Переменная=
FunctionEnd

Section
SectionEnd
Автор: kirillkr
Дата сообщения: 23.10.2013 08:53
Как проверить, что система x86 или x64?
Чтобы записать нужные файлы.
Автор: afinik
Дата сообщения: 23.10.2013 13:18
kirillkr
Может быть подойдет вот это? http://nsis.sourceforge.net/Get_Windows_version
Автор: MKN
Дата сообщения: 23.10.2013 14:20
kirillkr
Нужен обыкновенный штатный include - x64.nsh
Что и как - в сети тонны инфы.
Автор: Victor_VG
Дата сообщения: 23.10.2013 14:48
kirillkr

А плагин GetVersion:

Цитата:
GetVersion::WindowsPlatformArchitecture
Pop $R0

Gets the architecture of the installed Windows
(e.g. 32, 64)

чем не устраивает?
Автор: KloneBADGuY
Дата сообщения: 23.10.2013 18:52
kirillkr

Цитата:
Как проверить, что система x86 или x64?



Код: !include "x64.nsh"

${If} ${RunningX64}
MessageBox MB_OK|MB_ICONINFORMATION "x64"
${Else}
MessageBox MB_OK|MB_ICONINFORMATION "x86"
${EndIf}
Автор: kirillkr
Дата сообщения: 25.10.2013 19:32
KloneBADGuY

Без инклуда ругалось на ${If} долго не мог понять - спасибо.
Автор: Victor_VG
Дата сообщения: 25.10.2013 20:53
kirillkr

В инклюдах подключается внешний код, и если их нет, то компилятор его не сможет развернуть. Покажи вы сразу заголовок кода то мы бы вам раньше смогли помочь. У вас получалась накладка - вы вызываете макрос макроопределение для которого компилятору не известно и в итоге он не может его развернуть, компиляция завершается аварийно.
Автор: Pegalet
Дата сообщения: 12.12.2013 16:21
Всем привет.
Для NSIS есть плагин NsWeb, который позволяет отображать HTML файлы, как на одном из шагов установки, так и во всплывающем окне.
Использую этот плагин для отображения баннера в инсталляторе.
При клике на баннер, открывается internen explorer с адресом куда ведет ссылка в баннере.
Вопросов 2:
1. Как заставить открывать новую страницу не в internen explorer, а в браузере, установленный по умолчанию в системе юзера?
2. Как поменять размеры всплывающего окна, вызываемым ShowWebInPopUp?

Как я понял, без правок исходников NsWeb, оба вопроса не решаемы?
Может кто-нибудь что-то посоветует подходящее для реализации моей идеи с баннерами?
Автор: Victor_VG
Дата сообщения: 12.12.2013 16:37
Pegalet

Простое решение - использовать NsExec для запуска URL через оболочку. А дальше сами. Банеры/реклама мне не интересны.
Автор: Pegalet
Дата сообщения: 12.12.2013 17:45
Victor_VG
У меня цель не просто отправить человека по ссылке, а показать ему баннер (HTML) в окне инсталляции или во всплывающем окне. А по ссылке отправлять только после того, как он нажмет на баннер, вот тогда должен открыться браузер с нужной ссылкой

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

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


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