|
|
Line 17: |
Line 17: |
| !insertmacro GetParameterValue "/L=" "1033" | | !insertmacro GetParameterValue "/L=" "1033" |
| pop $MYPARAMETERVAR | | pop $MYPARAMETERVAR |
| </highlight-nsis>
| |
|
| |
|
| |
| <highlight-nsis>
| |
| Пример �?тандартной оболочки:
| |
| # им�? ин�?талл�?тора.
| |
| Name "Example"
| |
| # Файл в который будет получен по�?ле компил�?ции
| |
| OutFile "example.exe"
| |
| # Каталог в который будет в у�?тановлена программа.
| |
| InstallDir $PROGRAMFILES\Example
| |
|
| |
| # Отображаемые �?траници
| |
| Page directory
| |
| Page instfiles
| |
| UninstPage instfiles
| |
|
| |
| # Секци�? у�?тановки
| |
| Section "Main"
| |
| # Каталог назначени�?.
| |
| SetOutPath $INSTDIR
| |
| # Файлы
| |
| File "example.exe"
| |
| # Генерируем дизин�?талер
| |
| WriteUninstaller "uninstall.exe"
| |
| SectionEnd
| |
|
| |
| # Секци�? Дизин�?талера
| |
| Section "Uninstall"
| |
| Delete $INSTDIR\example.exe
| |
| Delete $INSTDIR\uninstall.exe
| |
| RMDir "$INSTDIR"
| |
| SectionEnd
| |
|
| |
| Пример Modern оболочки:
| |
| # И�?пользуем Modern оболочку
| |
| !include "MUI.nsh"
| |
|
| |
| # им�? ин�?талл�?тора.
| |
| Name "Example Modern UI"
| |
| # Файл в который будет получен по�?ле компил�?ции
| |
| OutFile "example.exe"
| |
| # Каталог в который будет в у�?тановлена программа.
| |
| InstallDir "$PROGRAMFILES\Example Modern UI"
| |
|
| |
| # Отображаемые �?траници
| |
| !insertmacro MUI_PAGE_COMPONENTS
| |
| !insertmacro MUI_PAGE_INSTFILES
| |
| !insertmacro MUI_UNPAGE_INSTFILES
| |
|
| |
| # Секци�? у�?тановки
| |
| Section "Main"
| |
| # Каталог назначени�?.
| |
| SetOutPath "$INSTDIR"
| |
| # Файлы
| |
| File "example.exe"
| |
| # Генерируем дизин�?талер
| |
| WriteUninstaller "$INSTDIR\Uninstall.exe"
| |
| SectionEnd
| |
|
| |
| # Секци�? Дизин�?талера
| |
| Section "Uninstall"
| |
| Delete "$INSTDIR\example.exe"
| |
| Delete "$INSTDIR\Uninstall.exe"
| |
| RMDir "$INSTDIR"
| |
| SectionEnd
| |
|
| |
|
| |
| Пример Ultra Modern оболочки:
| |
| # И�?пользуем Modern оболочку
| |
| !include "UMUI.nsh"
| |
|
| |
| # им�? ин�?талл�?тора.
| |
| Name "Example Ultra Modern UI"
| |
| # Файл в который будет получен по�?ле компил�?ции
| |
| OutFile "example.exe"
| |
| # Каталог в который будет в у�?тановлена программа.
| |
| InstallDir "$PROGRAMFILES\Example Ultra Modern UI"
| |
|
| |
| # Отображаемые �?траници
| |
| !insertmacro MUI_PAGE_COMPONENTS
| |
| !insertmacro MUI_PAGE_INSTFILES
| |
| !insertmacro MUI_UNPAGE_INSTFILES
| |
|
| |
| # Секци�? у�?тановки
| |
| Section "Main"
| |
| # Каталог назначени�?.
| |
| SetOutPath "$INSTDIR"
| |
| # Файлы
| |
| File "example.exe"
| |
| # Генерируем дизин�?талер
| |
| WriteUninstaller "$INSTDIR\Uninstall.exe"
| |
| SectionEnd
| |
|
| |
| # Секци�? Дизин�?талера
| |
| Section "Uninstall"
| |
| Delete "$INSTDIR\example.exe"
| |
| Delete "$INSTDIR\Uninstall.exe"
| |
| RMDir "$INSTDIR"
| |
| SectionEnd
| |
|
| |
| </highlight-nsis> | | </highlight-nsis> |
|
| |
|
Description
I created this function so I could define parameters on the command line to use in silent installs, the main push behind it was to define the default language that the installer should use. However, this should prove useful in any purpose where you need to retrieve a command line parameter.
See the syntax examples below; The stack will contain either the hard coded specified default value or the value supplied at the command line.
The Calling Procedure
!insertmacro GetParameterValue "/L=" "1033"
pop $R0
Or:
!insertmacro GetParameterValue "/L=" "1033"
pop $MYPARAMETERVAR
The Macros
; load language from command line /L=1033
; foo.exe /S /L=1033 /D=C:\Program Files\Foo
; or:
; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
; gpv "/L=" "1033"
!macro GETPARAMETERVALUE SWITCH DEFAULT
Push $0
Push $1
Push $2
Push $3
Push $4
;$CMDLINE='"My Setup\Setup.exe" /L=1033 /S'
Push "$CMDLINE"
Push '${SWITCH}"'
!insertmacro StrStr
Pop $0
StrCmp "$0" "" gpv_notquoted
;$0='/L="1033" /S'
StrLen $2 "$0"
Strlen $1 "${SWITCH}"
IntOp $1 $1 + 1
StrCpy $0 "$0" $2 $1
;$0='1033" /S'
Push "$0"
Push '"'
!insertmacro StrStr
Pop $1
StrLen $2 "$0"
StrLen $3 "$1"
IntOp $4 $2 - $3
StrCpy $0 $0 $4 0
Goto gpv_done
gpv_notquoted:
Push "$CMDLINE"
Push "${SWITCH}"
!insertmacro StrStr
Pop $0
StrCmp "$0" "" gpv_done
;$0='/L="1033" /S'
StrLen $2 "$0"
Strlen $1 "${SWITCH}"
StrCpy $0 "$0" $2 $1
;$0=1033 /S'
Push "$0"
Push ' '
!insertmacro StrStr
Pop $1
StrLen $2 "$0"
StrLen $3 "$1"
IntOp $4 $2 - $3
StrCpy $0 $0 $4 0
Goto gpv_done
gpv_done:
StrCmp "$0" "" 0 +2
StrCpy $0 "${DEFAULT}"
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
!macroend
; And I had to modify StrStr a tiny bit.
; Possible upgrade switch the goto's to use ${__LINE__}
!macro STRSTR
Exch $R1 ; st=haystack,old$R1, $R1=needle
Exch ; st=old$R1,haystack
Exch $R2 ; st=old$R1,old$R2, $R2=haystack
Push $R3
Push $R4
Push $R5
StrLen $R3 $R1
StrCpy $R4 0
; $R1=needle
; $R2=haystack
; $R3=len(needle)
; $R4=cnt
; $R5=tmp
; loop;
StrCpy $R5 $R2 $R3 $R4
StrCmp $R5 $R1 +4
StrCmp $R5 "" +3
IntOp $R4 $R4 + 1
Goto -4
; done;
StrCpy $R1 $R2 "" $R4
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Exch $R1
!macroend