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.
Мой хостер временно не доступен, видимо профилактика, не знаю. Со вчерашнего дня не достучатся. Вечером если не запустят - буду думать, а сейчас испаряюсь по делам демоническим.