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

» NSIS (Nullsoft Scriptable Install System)

Автор: Astra55
Дата сообщения: 15.04.2010 17:31
Dikxi

Цитата:
ThinApp хорошо снимки делает

Ересь глаголите, страшную ересь! У thinApp проприетарный формат всего снапшота, а в особенности - реестра. Ни в какой NSIS это потом запихать не получится. Точнее, вообще ни в один инсталлятор, кроме самого ThinApp.
Автор: alroy
Дата сообщения: 15.05.2010 16:55
Всех приветствую есть вопрос можно ли в Nsis сделать установщик в состав которого войдет и процесс выполнения скриптов sql на базу Firebird 1.5.x? Если не возможно может подскажите другой инсталятор с такой возможностью. Заранее спасибо !
Автор: Victor_VG
Дата сообщения: 15.05.2010 17:01
alroy

Да, возможно. Например через плагин nsExec - он вызывает фоновый консольный процесс и ждёт при необходимости его завершения.
Автор: BANbKA
Дата сообщения: 29.05.2010 02:34
http://forum.ru-board.com/topic.cgi?forum=8&topic=37613#1
Автор: Victor_VG
Дата сообщения: 29.05.2010 10:24
BANbKA

Ответил, читайте. Но в другой раз формулируйте вопрос не просто ссылкой - так Вас не поймут, и скорее всего просто не ответят, а то и за спам-бота примут.
Автор: Cramac
Дата сообщения: 29.05.2010 10:52
Здравствуйте. Подскажите, как можно сделать что бы на определенных ОС были доступны опредленные пункты установщика?
Сейчас с помощью
Function .onInit
${If} ${IsWinXP}
InitPluginsDir
GetTempFileName $0
Rename $0 '$PLUGINSDIR\custom.ini'
${Else}
MessageBox MB_OK "Внимание. Корректно работает только под Windows XP"
${EndIf}
выводится пердупреждение, но хотелось бы лочить пункты не работающие на каких либо ОС.

И еще попутно вопрос, как сделать что бы установщик не содержал файлы а скачал с сайта?
Автор: Victor_VG
Дата сообщения: 29.05.2010 12:12
Cramac

Например с помощью этой либы - [more=ProcLib 2.9]/*
**************************************************************
* ProcLib - procedure library for NSIS v2.9 *
**************************************************************

This library writing is VictorVG @ VikSoft.Ru, Russia, Moscow.
Writes is 12:20 02 Mar 2006, last updated at 06 May 2010 at 09:55
*/
!include "nsProcess.nsh"
!include "TextReplace.nsh"
!include "WordFunc.nsh"
!include "Registry.nsh"
!verbose 3
!verbose push
!ifndef _PROCLIB_VERBOSE
!define _PROCLIB_VERBOSE 3
!endif
!verbose ${_PROCLIB_VERBOSE}
!define PROCLIB_VERBOSE `!insertmacro _PROCLIB_VERBOSE`
!define SIDtU `!insertmacro StdInstDtU`
!define SIDtG `!insertmacro StdInstDtG`
!define SIDtI `!insertmacro StdInstDtI`
!define SIDtS `!insertmacro StdInstDtS`
!define TermProc `!insertmacro TermProc`
!define TrmPrc `!insertmacro TrmPrcc`
!define ErrDec `!insertmacro ErrDetCall`
!define PrDet `!insertmacro PrDetCall`
!define RplSet `!insertmacro ReplSeting`
!define MinVer `!insertmacro MinOSVer`
!define RngVer `!insertmacro RngOSVer`
!define PrcReg `!insertmacro PrcFndReg`
!define WriteEnvStr `!insertmacro WrtEnvStr`
!verbose pop
/*
;
Standard function templates for write new user defended functions.
;
!ifmacrondef CallMacroName ; Call'g macro
!macro CallMacroName [_PARAM1 ... _PARAMn]
; any code
Call CallFunctions
; any code
!macroend
!endif
!ifndef CallFunctName
    !define CallFunctName `!insertmacro CallMacroName`
Function CallFunctions ; internal function
; Function code
FunctionEnd
!endif
*/

!macro StdInstDtU
/*
Standart installer running detector for Update. $R1 == errolevel code is:
If standart installer not running $R1 == 0, then $R1 == 1
*/
Push $R0
${nsProcess::FindProcess} "setup.exe" $R0
StrCmp $R0 0 +8
${nsProcess::FindProcess} "install.exe" $R0
StrCmp $R0 0 +6
${nsProcess::FindProcess} "upgrade.exe" $R0
IntCmp $R0 0 +4
${nsProcess::FindProcess} "msiexec.exe" $R0
StrCmp $R0 0 +1 +4
StrCpy $R1 1
Goto +5
StrCmp $R0 603 +1 +4
StrCpy $R1 0
Goto +2
StrCpy $R1 $R0
Pop $R0
${nsProcess::Unload}
!macroEnd

!macro StdInstDtG
/*
Standart installer running detector for Upgrade. $R1 == errolevel code is:
If standart installer not running $R1 == 0, then $R1 == 1
*/
Push $R0
${nsProcess::FindProcess} "setup.exe" $R0
StrCmp $R0 0 +8
${nsProcess::FindProcess} "update.exe" $R0
StrCmp $R0 0 +6
${nsProcess::FindProcess} "install.exe" $R0
IntCmp $R0 0 +4
${nsProcess::FindProcess} "msiexec.exe" $R0
StrCmp $R0 0 +1 +4
StrCpy $R1 1
Goto +5
StrCmp $R0 603 +1 +4
StrCpy $R1 0
Goto +2
StrCpy $R1 $R0
Pop $R0
${nsProcess::Unload}
!macroEnd

!macro StdInstDtS
/*
Standart installer running detector for Setup. $R1 == errolevel code is:
If standart installer not running $R1 == 0, then $R1 == 1
*/
Push $R0
${nsProcess::FindProcess} "install.exe" $R0
StrCmp $R0 0 +8
${nsProcess::FindProcess} "update.exe" $R0
StrCmp $R0 0 +6
${nsProcess::FindProcess} "upgrade.exe" $R0
IntCmp $R0 0 +4
${nsProcess::FindProcess} "msiexec.exe" $R0
StrCmp $R0 0 +1 +4
StrCpy $R1 1
Goto +5
StrCmp $R0 603 +1 +4
StrCpy $R1 0
Goto +2
StrCpy $R1 $R0
Pop $R0
${nsProcess::Unload}
!macroEnd

!macro StdInstDtI
/*
Standart installer running detector for Install. $R1 == errolevel code is:
If standart installer not running $R1 == 0, then $R1 == 1
*/
Push $R0
${nsProcess::FindProcess} "setup.exe" $R0
StrCmp $R0 0 +8
${nsProcess::FindProcess} "update.exe" $R0
StrCmp $R0 0 +6
${nsProcess::FindProcess} "upgrade.exe" $R0
IntCmp $R0 0 +4
${nsProcess::FindProcess} "msiexec.exe" $R0
StrCmp $R0 0 +1 +4
StrCpy $R1 1
Goto +5
StrCmp $R0 603 +1 +4
StrCpy $R1 0
Goto +2
StrCpy $R1 $R0
Pop $R0
${nsProcess::Unload}
!macroEnd

!macro StdInstDtA
/*
Standart installer running detector for any name.
Output varuiables $R1 == errolevel code is:
If any standart installer not running $R1 == 0, then $R1 == 1
*/
Push $R0
${nsProcess::FindProcess} "install.exe" $R0
StrCmp $R0 0 +15
StrCmp $R0 603 +16 +20
${nsProcess::FindProcess} "setup.exe" $R0
StrCmp $R0 0 +12
StrCmp $R0 603 +13 +17
${nsProcess::FindProcess} "update.exe" $R0
StrCmp $R0 0 +9
StrCmp $R0 603 +10 +14
${nsProcess::FindProcess} "upgrade.exe" $R0
IntCmp $R0 0 +6
StrCmp $R0 603 +7 +11
${nsProcess::FindProcess} "msiexec.exe" $R0
StrCmp $R0 0 +2
StrCmp $R0 603 +4 +8
StrCpy $R1 1
Goto +2
StrCpy $R1 0
${nsProcess::Unload}
Goto +2
${ErrDec} $R0
Pop $R0
!macroEnd

!macro TermProc _PROCNAME _TXTFILE
/*
This macros is finde indicated process and kill it if running.
If needed, macros output error code on display. See ${NSISDIR}\Docs\nsProcess\readme.txt for details.

Parameters:

_PROCNAME full process name include extensions
_TXTFILE full diagnostics messages list file name include extensions
*/
Push $0
${nsProcess::FindProcess} _PROCNAME $0
StrCmp $0 603 +16
IntCmp $0 604 +11 +1 +11
StrCpy $0 0
${nsProcess::KillProcess} _PROCNAME $0
IntCmp $0 603 +12 +1 +8
IntCmp $0 0 +11
StrCmp $0 602 +6 +1
StrCmp $LANGUAGE 1049 +2
MessageBox MB_ICONSTOP|MB_OK "Your don't have permission to terminate process _PROCNAME. Error code 601." IDOK +2
MessageBox MB_ICONSTOP|MB_OK "У Вас нет прав для удаления процесса _PROCNAME. Код ошибки 601." IDOK +1
Quit
StrCmp $LANGUAGE 1049 +2
MessageBox MB_ICONSTOP|MB_OK "System error $0. Setup terminated. See _TXTFILE for error code details." IDOK +2
MessageBox MB_ICONSTOP|MB_OK "Системная ошибка $0. Установка прервана. Расшифровку кодов ошибок смотрите в _TXTFILE." IDOK +1
Quit
${nsProcess::Unload}
Pop $0
!macroend

!macro TrmPrcc _PRCS
/*
This macros is finde indicated process and kill it if running.
If needed, macros output error messages on display.
Input parameters: _PRCS full process name include extensions.
*/
Push $0
${nsProcess::FindProcess} ${_PRCS} $0
StrCmp $0 0 +2
StrCmp $0 603 +9 +12
StrCmp $LANGUAGE 1049 +2
MessageBox MB_ICONQUESTION|MB_YESNO 'Waring! Process ${_PRCS} already runing.$\nPress "Yes" for terminate it or "No" for quit.' IDYES +4 IDNO +2
MessageBox MB_ICONQUESTION|MB_YESNO 'Внимание! Процесс ${_PRCS} запущен.$\nНажмите "Да" для его завершения или "Нет" для выхода.' IDYES +2 IDNO +1
Quit
${nsProcess::KillProcess} ${_PRCS} $0
StrCmp $0 0 +2
StrCmp $0 603 +1 +5
${nsProcess::Unload}
Pop $0
Goto +65
StrCmp $0 601 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Your do not have permission to terminate process"
Goto +2
StrCpy $1 "У Вас нет права прекращения процессов"
Goto +55
StrCmp $1 602 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Not all processes terminated successfully"
Goto +2
StrCpy $1 "Не все процесы завершены успешно"
Goto +49
StrCmp $0 604 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to identify system type"
Goto +2
StrCpy $1 "Не удалось определить тип системы"
Goto +43
StrCmp $0 605 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unsupported OS"
Goto +2
StrCpy $1 "Не поддерживаемая ОС"
Goto +37
StrCmp $0 606 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки NTDLL.DLL"
Goto +31
StrCmp $0 607 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из NTDLL.DLL"
Goto +25
StrCmp $0 608 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "NtQuerySystemInformation failed"
Goto +2
StrCpy $1 "Ошибка вызова NtQuerySystemInformation"
Goto +19
StrCmp $0 609 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки KERNEL32.DLL"
Goto +13
StrCmp $0 610 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из KERNEL32.DLL"
Goto +7
StrCmp $0 611 +1
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "CreateToolhelp32Snapshot failed"
Goto +2
StrCpy $1 "Ошибка вызова CreateToolhelp32Snapshot"
StrCmp $LANGUAGE 1049 +2 +1
MessageBox MB_OK|MB_ICONEXCLAMATION "Waring! System error status is $0, $1 setup can't continue." IDOK +2
MessageBox MB_OK|MB_ICONEXCLAMATION "Внимание! Возникла системная ошибка $0, $1 установка прекращена." IDOK +1
Quit
!macroend

!macro ErrDetCall _ERRCODE
/*
${ErrDec} function for nsProcess error code decode and user alarm.
If Error Code detected this function generated user alarm and terminated
terminated current installation.
Usage ${ErrDec} $var
$var - input variable contaned analasing code.
*/
StrCpy $0 ${_ERRCODE}
StrCmp $0 601 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Your do not have permission to terminate process"
Goto +2
StrCpy $1 "У Вас нет права прекращения процессов"
Goto +55
StrCmp $1 602 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Not all processes terminated successfully"
Goto +2
StrCpy $1 "Не все процесы завершены успешно"
Goto +49
StrCmp $0 604 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to identify system type"
Goto +2
StrCpy $1 "Не удалось определить тип системы"
Goto +43
StrCmp $0 605 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unsupported OS"
Goto +2
StrCpy $1 "Не поддерживаемая ОС"
Goto +37
StrCmp $0 606 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки NTDLL.DLL"
Goto +31
StrCmp $0 607 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из NTDLL.DLL"
Goto +25
StrCmp $0 608 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "NtQuerySystemInformation failed"
Goto +2
StrCpy $1 "Ошибка вызова NtQuerySystemInformation"
Goto +19
StrCmp $0 609 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки KERNEL32.DLL"
Goto +13
StrCmp $0 610 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из KERNEL32.DLL"
Goto +7
StrCmp $0 611 +1
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "CreateToolhelp32Snapshot failed"
Goto +2
StrCpy $1 "Ошибка вызова CreateToolhelp32Snapshot"
StrCmp $LANGUAGE 1049 +2 +1
MessageBox MB_OK|MB_ICONEXCLAMATION "Waring! System error status is - $0, $1 setup can't continue." IDOK +2
MessageBox MB_OK|MB_ICONEXCLAMATION "Внимание! Возникла системная ошибка - $0, $1 установка прекращена." IDOK +1
Quit
!MacroEnd

/*
Function ${PrDet}. Detector if process is ruining.
Usage: ${PrDet} _ProcName _ReturnCode
_ProcName = full process name include extension
_ReturnCode =
is "0" if process not running
or "1" if process running
or Error Code if detected any system error.
All Error Code equivalents ${nsProcess:FindProcess} error code list.
*/
!macro PrDetCall _PRCNM _Erorl
${nsProcess::FindProcess} ${_PRCNM} $0
IntCmp $0 603 +4 +1 +6
StrCpy ${_Erorl} 1
Goto +5
StrCpy ${_Erorl} 0
Goto +2
StrCpy ${_Erorl} $0
!macroend

!macro ReplSeting _KEY _SKEY _VALUE _REGFI _REGFO _STR _ERR
/*
This macro is replace value in saved .REG-file using existing Registry value.
If macro detected error, then Error flags is set On, and returned error code.

Parameters:

_KEY HKCU|HKLM|HKCR... - root Registry key for find setting
_SKEY subkey for find setting
_VALUE value for find setting
_REGFI - input .REG-file
_REGFO - output .REG-file
_STR - replaced string value
_ERR - variable for output error

Examples:

${RplSet} HKCU "Software\Mysoft\ModuleDir\MyModule" "Value" "$INSTDIR\configdir\default.reg" "$INSTDIR\configdir\default.reg" "C:\\Program Files\\MyPogram\\SubDir\\ModuleDir\\Module.exe" $1

or

${RplSet} HKLM "Software\MyProg" "InstallDir" "$INSTDIR\configdir\default.reg" "$INSTDIR\configdir\default.reg" "C:\\Program Files\\MyProgram" $1

*/
Push $0
ReadRegStr $0 ${_KEY} "${_SKEY}" "${_VALUE}"
${WordReplace} "$0" "\" "\\" "+" $0
${textreplace::ReplaceInFile} "${_REGFI}" "${_REGFO}" "${_STR}" "$0" "/PO=0" ${_ERR}
IntCmp ${_ERR} "-1" +1 +1 +4
SetErrors
Goto +4
ClearErrors
StrCpy "${_ERR}" 0
Pop $0
!macroend

!macro MinOSVer _minver _retn
/*
This macro detected OS version, compared to _mimver and retuned "1" if OS version
equivalents or highest then _minver, or "0" if less in to users variables _retn

Parameters:

_minver - minimal version, two digits, example 51
_retn - user variables for returned results, exclude registers $0 and $1

Rescriptions:

Your can't use register $0 and $1 as _retn variables

Examples:

; added on to script header:

...
!include "ProcLib.nsh"
var s1
...

Section "Code"
...
${MinOSVer} 51 $s1
...
SectionEnd

*/
Push $0
Push $1
StrCpy ${_retn} 0
nsisos::osversion
StrCmp $0 "" +1 +2
StrCpy $0 0
StrCmp $1 "" +1 +2
StrCpy $1 0
StrCpy $0 $0$1
IntCmp $0 ${_minver} +1 +2
StrCpy ${_retn} 1
Pop $0
Pop $1
!macroend

!macro RngOSVer _minver _maxver _retn
/*
This macro gets the operating system version and service pack number, checks
whether it is in the range _minver and _maxver, and if the version of the
system with installed service pack number, located in the specified range,
it returns "1" in the variable _retn, in other cases it returns "0".

Parameters:

_minver - min version and service pack number, always free digits, example 510
_minver - max version and service pack number, always free digits, example 513
_retn - user variables for returned results, exclude registers $0 and $1

Notes: if any digit not existing You mast replace this symbol use "0" digit.

Rescriptions:

Your can't use register $0 - $1 as _retn variables

Examples:

!include "ProcLib.nsh"
var s1
...

Section "Code"
...
${RngOSVer} 500 619 $s1
...
SectionEnd
*/
Push $0
Push $1
StrCpy ${_retn} 0
Version::GetWindowsVersion
Pop $0
StrCmp $0 "" +1 +2
StrCpy $0 0
Pop $1
StrCmp $1 "" +1 +2
StrCpy $1 0
StrCpy $0 $0$1
Pop $1
Pop $1
Pop $1
StrCmp $1 "" +1 +2
StrCpy $1 0
StrCpy $1 $1 1 -1
StrCpy $0 $0$1
IntCmp $0 ${_maxver} +1 +1 +4
IntCmp $0 ${_minver} +1 +2
StrCpy ${_retn} 1
Pop $0
Pop $1
!macroend

!macro PrcFndReg _rkey1 _key1 _value1 _rkey2 _key2 _value2 _ofset _mode _retn
/*
This function detected and terminate any process use path saved in to Registry.

_rkey1 - Registry root key to checked programm full path
_key1 - Registry key to checked programm full path
_value1 - Registry value to checked programm full path
_rkey2 - Registry root key to checked programm path
_key2 - Registry key to checked programm path
_value2 - Registry value to checked programm path
_ofset - additional ofset if needed, if ofset can't needed mast be is 0
_mode - calling mode: if T - find and terminate process, else - only find
_retn - process detect code: if process currenly running is "running", else is "success"

Rescriptions:

Thsis macros used and restored registers $0, $1, $2, $3 and Your cann't use it as parameters.

Examples:

PrcFndReg HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1" \
"DisplayIcon" HKLM \
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1" \
"InstallLocation" 0 $4
*/
Push $3
Push $2
Push $1
Push $0
ReadRegStr $3 ${_rkey1} ${_key1} ${_value1}
ReadRegStr $1 ${_rkey2} ${_key2} ${_value2}
StrLen $2 $1
IntOp $2 $2 + ${_ofset}
StrCpy $3 $3 "" $2
StrCpy ${_retn} "running"
${nsProcess::FindProcess} $3 $2
IntCmp $2 604 +14 +1 +14
StrCmp $2 0 +2
StrCpy ${_retn} "success"
StrCmp ${_mode} "T" +1 +6
StrCmp ${_retn} "success" +5
${nsProcess::KillProcess} $3 $2
IntCmp $2 603 +1 +1 +8
StrCpy ${_retn} "success"
Pop $0
Pop $1
Pop $2
Pop $3
Goto +65
StrCmp $2 601 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Your do not have permission to terminate process"
Goto +2
StrCpy $1 "У Вас нет права прекращения процессов"
Goto +55
StrCmp $1 602 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Not all processes terminated successfully"
Goto +2
StrCpy $1 "Не все процесы завершены успешно"
Goto +49
StrCmp $2 604 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to identify system type"
Goto +2
StrCpy $1 "Не удалось определить тип системы"
Goto +43
StrCmp $2 605 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unsupported OS"
Goto +2
StrCpy $1 "Не поддерживаемая ОС"
Goto +37
StrCmp $2 606 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки NTDLL.DLL"
Goto +31
StrCmp $2 607 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from NTDLL.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из NTDLL.DLL"
Goto +25
StrCmp $2 608 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "NtQuerySystemInformation failed"
Goto +2
StrCpy $1 "Ошибка вызова NtQuerySystemInformation"
Goto +19
StrCmp $2 609 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to load KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка загрузки KERNEL32.DLL"
Goto +13
StrCmp $2 610 +1 +7
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "Unable to get procedure address from KERNEL32.DLL"
Goto +2
StrCpy $1 "Ошибка вызова процедуры из KERNEL32.DLL"
Goto +7
StrCmp $2 611 +1
StrCmp $LANGUAGE 1049 +4
StrCpy $1 "CreateToolhelp32Snapshot failed"
Goto +2
StrCpy $1 "Ошибка вызова CreateToolhelp32Snapshot"
StrCmp $LANGUAGE 1049 +2 +1
MessageBox MB_OK|MB_ICONEXCLAMATION "Waring! System error status is - $2, $1 setup can't continue." IDOK +2
MessageBox MB_OK|MB_ICONEXCLAMATION "Внимание! Возникла системная ошибка - $2, $1 установка прекращена." IDOK +1
Quit
!macroend

!macro WrtEnvStr _HKR _Key _ValueName _Value _Sep
/*
This function detected existing enveronment variables and appen it or create new enveronment variables record if needed.

Parameters:

_HKR - Registry root key for variable
_Key - Registry key for variable
_ValueName - Registry value for variable
_Value - variable value
_Sep - value separator. If _Sep not used, then _Sep mast be defined as "".

Examples:

WrtEnvStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "CYGWIN" "nodosfilewarning" " "
*/
Push $1
Push $0
ClearErrors
ReadEnvStr $0 ${_ValueName}
StrCmp $0 "" +1 +4
WriteRegStr ${_HKR} "${_Key}" "${_ValueName}" "${_Value}"
Goto +5
${WordFind} $0 "${_ValueName}" "#" $1
StrCmp $1 0 +1 +2
${registry::WriteExtra} "${_HKR}\${_Key}" "${_ValueName}" "${_Sep}${_Value}" $1
Pop $0
Pop $1
!macroend[/more]. Обозвать как ProcLib.nsh и кинуть в Include, а дока - вот она [more=ProcLib мануал] **************************************************************
* ProcLib - process management tools library for NSIS v2.xx *
**************************************************************

This library writing is VictorVG @ VikSoft.Ru, Russia, Moscow.
Writes is 12:20 02 Mar 2006, updated to v2.6 at 06 May 2010 at 09:55
---------------------------------------------------------------------

Required:

Before use ProcLib please, insert command into header in to Your script:

!include "ProcLib.nsh"

NOTES:

Before use ProcLib.nsh in to Your project script, Your mast always
remove directive !include "nsProcess.nsh" then this directive already
included on "ProcLib.nsh" for prevent compilation stop and generation
"Duplicate !include "nsProcess.nsh"." error messages.

In to ProcLib.nsh v.2.0 added standard template for write user factions.

ProcLib.nsh provided is flowing macros and functions:

Old functions:
==============

SIDtU, SIDtG, SIDtI, SIDtS
--------------------------

Standard installer running detector:

SIDtU - is standart installer running filter-detector for use on Update.
SIDtG - is standart installer running filter-detector for use on Upgrade.
SIDtI - is standart installer running filter-detector for use on Setup.
SIDtS - is standart installer running filter-detector for use on Install.

All this macro returned status
code on register $R1 if checked process is:

not running - 0
running - 1

Usage:

${SIDtU} or ${SetDetU} or ${SIDtG} or ${SetDetG} or ${SIDtI}
or ${SetDetI} or ${SIDtS} or ${SetDetS}

NOTES:

If this macro use in .onInit function, then this macros mast write in
to starting block on this function!

This macros can use .onInit function or main program.

TermProc
--------

This macros is find selected process and kill it if running. Macros
display system error code is use standart messages box and terminated
install procedure:

601 No permission to terminate process
602 Not all processes terminated successfully
604 Unable to identify system type
605 Unsupported OS
606 Unable to load NTDLL.DLL
607 Unable to get procedure address from NTDLL.DLL
608 NtQuerySystemInformation failed
609 Unable to load KERNEL32.DLL
610 Unable to get procedure address from KERNEL32.DLL
611 CreateToolhelp32Snapshot failed

If macro is the display a system error code you owe:

601 - Please, contact Your system administrator - Your don't have
right for terminate this process;
602 - Please, use Task Manager or equivalents tool for handled
terminate all running copy on this process and restart Setup.
on 604 up to 611 - Please, contact Your system administrator or
operating system engineer for correct this system error.

Usage: ${TermProc} _PROCNAME _TXTFILE

Parameters:

_PROCNAME full process name include extensions
_TXTFILE full diagnostics messages list file name include extensions


This macros can use .onInit function or main program.

TrmPrc
------

This macros is find indicated process and kill it if running. If
needed, macros output error messages on display use ErrDcd function.
This macro required only one parameter: "_PRCNM" - full process
executable file name include extensions. Messages languages is only
English and Russian.

NOTES:

If Your use ${SetDet} function at .onInit/.unInit function, I recommended
write this function in to starting block on .onInit/.unInit function!

Usage: ${TrmPrc} _PRCNM,

Parameter:

_PRCNM - process executable name include extension.

This macros can use .onInit function or main program.

ErrDec
------

${ErrDec} is function for nsProcess error code decode and user alarm.
If Error Code detected this function generated user alarm and
terminated terminated current installation.

Usage: ${ErrDec} _var

Parameters:

_var - input variable contaned analasing code.

This function can use .onInit/.unInit function or main program.

PrDet
-----

Function ${PrDet}. Detector if checked process is ruining.

Usage: ${PrDet} _ProcName _ReturnCode

Parameters:

_ProcName - full process name include extension
_ReturnCode - is "0" if process not running or "1" if process running
or Error Code if detected any system error.

All Error Code equivalents ${nsProcess:FindProcess} error code list.


RplSet
------

This function is replace value in saved .REG-file using existing Registry value.
If function is detected error, then Error flags is set On, and returned error code.

Usage: ${RplSet} KEY _SKEY _VALUE _REGFI _REGFO _STR _ERR

Parameters:

_KEY HKCU|HKLM|HKCR... - root Registry key for find setting
_SKEY subkey for find setting
_VALUE value for find setting
_REGFI - input .REG-file
_REGFO - output .REG-file
_STR - replaced string value
_ERR - variable for output error

Examples:

${RplSet} HKCU "Software\Mysoft\ModuleDir\MyModule" "Value" "$INSTDIR\configdir\default.reg" \
"$INSTDIR\configdir\default.reg" "C:\\Program Files\\MyPogram\\SubDir\\ModuleDir\\Module.exe" $1

or

${RplSet} HKLM "Software\MyProg" "InstallDir" "$INSTDIR\configdir\default.reg" \
"$INSTDIR\configdir\default.reg" "C:\\Program Files\\MyProgram" $1


MinVer
------

This function is simply detected OS version, compared to _mimver and returned "1"
if OS version eqvalents or highest then requiremens, or "0" if letter in to users
variables _retn

Usage: ${MinVer} _minver _retn

Parameters:

_minver - minimal version, two digits, example 51
_retn - user variables for returned results, exclude registers $R0 - $R2

Rescriptions:

Your can't use register $R0 - $R2 as _retn variables

Examples:

; added on to script header:

...
!include "ProcLib.nsh"
var s1
...

Section "Code"
...
${MinVer} 51 $s1
...
SectionEnd

RngVer
------

This functions gets the operating system version and service pack number,
checks whether it is in the range _minver and _maxver, and if the version
of the system with installed service pack number, located in the specified
range, it returns "1" in the variable _retn, in other cases it returns "0".

Usage: ${RngVer} _minver _maxver _retn

Parameters:

_minver - min version and service pack number, always free digits, example 510
_minver - max version and service pack number, always free digits, example 513
_retn - user variables for returned results, exclude registers $0 and $1

Notes: if any digits not existing You mast replace this symbol use "0" digit.

Rescriptions:

Your can't use register $0 - $1 as _retn variables

Examples:

var s1

...

${RngVer} 501 513 $s1

; added on to script header:

...
!include "ProcLib.nsh"
var s1
...

Section "Code"
...
${RngVer} 500 619 $s1
...
SectionEnd

Detect OS version and service pack number then check that OS is Windows 2000 or
Windows XP/2003, or Windows Vista/2008, or Windows 7/2008 R2 and return "1" if
true. Else this function returned "0" if comparison is failure.

PrcReg
------

This function detected and terminate any process use path saved in to Registry.

Usage: ${PrcFndReg} _rkey1 _key1 _value1 _rkey2 _key2 _value2 _ofset _mode _retn

Parameters:

_rkey1 - Registry root key to checked programm full path
_key1 - Registry key to checked programm full path
_value1 - Registry value to checked programm full path
_rkey2 - Registry root key to checked programm path
_key2 - Registry key to checked programm path
_value2 - Registry value to checked programm path
_ofset - additional ofset if needed, if ofset can't needed mast be is 0
_mode - calling mode: if T - find and terminate process, else - only find
_retn - process detect code: if process currenly running is "running", else is "success"

Rescriptions:

Thsis macros used and restored registers $0, $1, $2, $3 and Your cann't use it as parameters.

Examples:

PrcFndReg HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1" \
"DisplayIcon" HKLM \
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1" \
"InstallLocation" 0 $4

WriteEnvStr
-----------

This function detected existing enveronment variables and appen it or create new enveronment
variables record if needed.

Usage: ${WriteEnvStr} _HKR _Key _ValueName _Value _Sep

Parameters:

_HKR - Registry root key for variable
_Key - Registry key for variable
_ValueName - Registry value for variable
_Value - variable value
_Sep - value separator. If _Sep not used, then _Sep mast be defined as "".

Examples:

WrtEnvStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" \
"CYGWIN" "nodosfilewarning" " " $R0[/more]
там я этот фокус предусмотрел - макрос RngVer ответит положительно только, если версия ОС находится в указанных пределах. Ну а скачивать умеет стандартный плагин NSISdl. Он сразу с NSIS ставится, описание есть в ./Docs и .Examples ну и на сайте проекта естественно.

P.S.

Мой хостер временно не доступен, видимо профилактика, не знаю. Со вчерашнего дня не достучатся. Вечером если не запустят - буду думать, а сейчас испаряюсь по делам демоническим.
Автор: MaxLab2008
Дата сообщения: 04.06.2010 17:41
Русификацию для новой версии / NSIS 2.47 Preview (01.06) / ожидаем завтра ближе к вечеру. Ибо готовится к выходу русик для 2.46.

upd.: Сорри за долго ожидание и мое появление. :-[

NSIS 2.47 Preview (01.06)
_http://download.s-max.ws/soft/nsis/nsis-build-01-Jun-2010-setup.exe
Автор: Victor_VG
Дата сообщения: 04.06.2010 21:18
MaxLab2008

А может подождём полного списка изменений, и потом сразу всё сделаем чтобы по сто раз не переделывать? Тебе твой пакет, мне мои обновы и переводы?
Автор: MaxLab2008
Дата сообщения: 04.06.2010 21:58
Готов перевод для NSIS 2.46
_http://download.s-max.ws/myrus/nsis/steam-nsis246rus.rar (86 кб)

NSIS 2.46 Final
_http://download.s-max.ws/soft/nsis/nsis-2.46-setup.exe (1.52 мб)

Работаю над переводом NSIS 2.47 Prewiev Build 01.06.

Есть предложение (!). Организовать группу и перевести документацию по NSIS. Кто что скажет?

Добавлено:
Victor_VG, сорри, сразу не заметил твое сообщение.
По 100 раз переделывать ничего и не нужно. А что за список? Имеется ввиду плагины перевести или что-еще?

Добавлено:
Предварительный ответ русским языком компании Nullsoft на NSIS 2.47 Preview (01.06)
_http://download.s-max.ws/myrus/nsis/steam-nsis247-0106rus.rar

Ссылка на программу - 2 постав выше.

Предложения, пожелания, замечния относительно перевода высылаем на softman@s-max.ws.
Автор: Victor_VG
Дата сообщения: 05.06.2010 02:22
MaxLab2008

Новые команды там появляются периодически и тогда приходится приводить в порядок систему справки для HM NIS - он использует адресацию Справки по индексу. Ну и периодически приходится его перестраивать. Покуда в changelog таких не помню точно, штук двадцать с хвостиком поправок у меня набралось. С плагинами там чаще всего и перевод не нужен, если только доки переводить, там больше нужно пинать нерадивых авторов исправлять найденные в их плагинах ошибки. Перевести документацию идея не просто здравая, а назревшая задача, тут я могу с ходу сказать я "За!" и без вопросов - это работа нужная, а привязать при нужде переведённую справку к компилятору - исходники есть в конце концов, да и думаю его разработчики помогут - это работа идёт на пользу проекту в целом, а ребята там сидят умные.
Автор: MaxLab2008
Дата сообщения: 05.06.2010 03:16
Victor_VG, пиши в 663-481, обсудим более подробнее!
Автор: Victor_VG
Дата сообщения: 05.06.2010 03:47
MaxLab2008

Проще почта, да и с переездом не до аськи будет. Ключи дали, достраиваю,
Автор: MaxLab2008
Дата сообщения: 05.06.2010 17:16
Victor_VG, softman@s-max.ws, как устроишься, велком!
Автор: Victor_VG
Дата сообщения: 05.06.2010 21:17
MaxLab2008

Договорились.
Автор: MaxLab2008
Дата сообщения: 06.06.2010 06:04
NSIS 2.47 Preview (Build 04.06)
_http://download.s-max.ws/soft/nsis/nsis-build-04-Jun-2010-setup.exe

Русификация для последней версии
_http://download.s-max.ws/myrus/nsis/steam-nsis247-0406rus.rar

Вопросы, замечания и пожелания на softman@s-max.ws, либо на 663-481.
Автор: LonerDergunov
Дата сообщения: 08.06.2010 22:26
Может, у кого-то остался NSIS scripts for Total Commander plugins:
http://wincmd.ru/plugring/nsis_scripts.html
Автор: neZlodey
Дата сообщения: 13.06.2010 13:32
NSIS 2.47 Preview (Build 11.06)
http://sourceforge.net/projects/nsis-builds/files/nsis-build-11-Jun-2010-setup.exe/download
Автор: MaxLab2008
Дата сообщения: 13.06.2010 15:35
NSIS 2.47 Preview (Build 04.06)
_http://download.s-max.ws/soft/nsis/nsis-build-09-Jun-2010-setup.exe

Русификация программы
_http://download.s-max.ws/myrus/nsis/steam-nsis247-0906rus.rar

Добавлено:
NSIS 2.47 Preview (Build 11.06)
_http://download.s-max.ws/soft/nsis/nsis-build-11-Jun-2010-setup.exe
Автор: MaxLab2008
Дата сообщения: 16.06.2010 21:18
NSIS 2.47 Preview (Build 15.06)
_http://download.s-max.ws/soft/nsis/nsis-build-15-Jun-2010-setup.exe

Русификация программы
_http://download.s-max.ws/myrus/nsis/steam-nsis247-1506rus.rar
Автор: spike
Дата сообщения: 18.06.2010 09:32
Как поместить файл в папку пользователя Default User (WinXP/Win2003) и Default (Vista/7/2008/2008R2) ?
Автор: Victor_VG
Дата сообщения: 18.06.2010 11:11
spike

Пути прописать относительно системного тома. Для этого используй их получение из Реестра. Нет проблемы, чуть подумать разве что.
Автор: zeleboba
Дата сообщения: 24.06.2010 01:20
Подскажите, пожалуйста, что может значить такая ошибка:
"Processed 1 file, writing output:
Adding plug-ins initializing function... Done!
Error: resolving install function "Nsis2Io" in function "mui.WelcomePre_40.5.9"
Note: uninstall functions must begin with "un.", and install functions must not
Error - aborting creation process"

Причем скрипт работал год назад на Vista, кажется. Сейчас нужно запустить его на Windows 7 - выдает ошибку. Подозреваю, что версия NSIS тоже обновилась за это время. Сейчас только скачал свежую.

И вроде бы все функции реально начинаются с un., как и в ошибке написано.
Автор: Victor_VG
Дата сообщения: 24.06.2010 04:23
zeleboba

В скрипте ошибка. NSIS 2.46 на 7-ке работает. Дальше - смотреть надо.
Автор: zeleboba
Дата сообщения: 24.06.2010 11:01
Victor_VG, а можно хотя бы как-то отловить, на какую строку он ругается, если ошибка не дает номера строки?)
Автор: John_White
Дата сообщения: 24.06.2010 12:57
zeleboba

Цитата:
Note: uninstall functions must begin with "un.", and install functions must not

Читаем:
Примечание: функции удаления должны быть с префиксом "un."
Делаем соответствующие выводы...
ЗЫ
У тебя ошибка в секциях как вариант.
Автор: dimbat
Дата сообщения: 24.06.2010 13:28
Подскажите, как в nsis реализовать добавление нужных записей в "Stored User Names And Passwords"?
(вызывается соответственно rundll32.exe keymgr.dll, KRShowKeyMgr).
Идея автоматизировать этот процесс созданием диалогового окна "Логин-пароль" для сохранения приличного кол-ва записей на доступ к доменным ресурсам сразу целым списком, чтобы избавить юзера от авторизации на каждом.
---
Пробовал применить net use с ключом /savecred, но позволяет сохранять только без ключа /user. Но необходимо прописать именно юзер/пароль и сохранить перманентно, а не только на сессию. Т.е. не подошло для моей задачи.

Буду признателен за идеи.
Спасибо.
Автор: Victor_VG
Дата сообщения: 25.06.2010 00:00
dimbat

Как вариант - поместить пары в подобие INI, простой парсер читающий строки в цикле и вызов плагина system с передачей вызова в keymgr.dll, KRShowKeyMgr либо звать nsExec::Exec "rundll32.exe keymgr.dll, KRShowKeyMgr" с передачей подготовленных параметров например в регистре. Признаком завершения счётчика поставить ну ноль, а число записей писать в отдельную секцию входного файла типа такой структуры:

Цитата:
[count]
"count"="N"
[data]
"user_0"="user_name"
"pasw_0"="pasword"
.....
"user_N"="user_name"
"pasw_N"="pasword"

А она читается в пол оборота директивой ReadIniStr прямиком в регистр. Остальная логика по месту.
Автор: dimbat
Дата сообщения: 25.06.2010 00:54
Victor_VG
Цикл пар тут совсем не нужен, ибо логин/пароль будет один и тот же для всех сетевых ресурсов. Я, видимо, невнятно задачу обрисовал просто.
Т.е. алгоритм будет такой:
* Юзер вводит в диалоговое окно свой $логин/$пароль
* Отсылаем в "Диспетчер учетных данных" связку \\server1, домен\$логин, $пароль. Сохраняем.
* Отсылаем след. связку \\server2, домен\$логин, $пароль. Сохраняем.
* ... \\server3, домен\$логин, $пароль. Сохраняем.
...
и т.д. до конца списка серверов, которые заранее определены.

Основная задача:

Цитата:
вызов плагина system с передачей вызова в keymgr.dll, KRShowKeyMgr

или

Цитата:
звать nsExec::Exec "rundll32.exe keymgr.dll, KRShowKeyMgr" с передачей подготовленных параметров например в регистре

Здесь я как раз не силен. Если не затруднит, напишите на примере одного такого цикла передачи и сохранения параметров.
Спасибо.
Автор: Victor_VG
Дата сообщения: 25.06.2010 18:39
dimbat

Что то типа такого куска алгоритма:

StrCpy $R1 ${N}
do:
ReadIniStr $R0 "Servers" $R1
nsExec::Exec "rundll32.exe keymgr.dll, KRShowKeyMgr, ...."
IntOp $R1 $R1 - 1
StrCmp $R1 0 next do

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

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


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