Get Parameter Value: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 21: Line 21:


<highlight-nsis>
<highlight-nsis>
Пример Ñ?тандартной оболочки:
Пример �?тандартной оболочки:
# имÑ? инÑ?таллÑ?тора.
# им�? ин�?талл�?тора.
Name "Example"
Name "Example"
# Файл в который будет получен поÑ?ле компилÑ?ции
# Файл в который будет получен по�?ле компил�?ции
OutFile "example.exe"
OutFile "example.exe"
# Каталог в который будет в уÑ?тановлена программа.
# Каталог в который будет в у�?тановлена программа.
InstallDir $PROGRAMFILES\Example
InstallDir $PROGRAMFILES\Example


# Отображаемые Ñ?траници
# Отображаемые �?траници
Page directory
Page directory
Page instfiles
Page instfiles
UninstPage instfiles
UninstPage instfiles


# СекциÑ? уÑ?тановки
# Секци�? у�?тановки
Section "Main"
Section "Main"
   # Каталог назначениÑ?.
   # Каталог назначени�?.
   SetOutPath $INSTDIR
   SetOutPath $INSTDIR
   # Файлы
   # Файлы
   File "example.exe"
   File "example.exe"
   # Генерируем дизинÑ?талер
   # Генерируем дизин�?талер
   WriteUninstaller "uninstall.exe"
   WriteUninstaller "uninstall.exe"
SectionEnd
SectionEnd


# СекциÑ? ДизинÑ?талера
# Секци�? Дизин�?талера
Section "Uninstall"
Section "Uninstall"
   Delete $INSTDIR\example.exe
   Delete $INSTDIR\example.exe
Line 52: Line 52:


Пример Modern оболочки:
Пример Modern оболочки:
# ИÑ?пользуем Modern оболочку
# И�?пользуем Modern оболочку
!include "MUI.nsh"
!include "MUI.nsh"


# имÑ? инÑ?таллÑ?тора.
# им�? ин�?талл�?тора.
Name "Example Modern UI"
Name "Example Modern UI"
# Файл в который будет получен поÑ?ле компилÑ?ции
# Файл в который будет получен по�?ле компил�?ции
OutFile "example.exe"
OutFile "example.exe"
# Каталог в который будет в уÑ?тановлена программа.
# Каталог в который будет в у�?тановлена программа.
InstallDir "$PROGRAMFILES\Example Modern UI"
InstallDir "$PROGRAMFILES\Example Modern UI"


# Отображаемые Ñ?траници
# Отображаемые �?траници
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES


# СекциÑ? уÑ?тановки
# Секци�? у�?тановки
Section "Main"
Section "Main"
   # Каталог назначениÑ?.
   # Каталог назначени�?.
   SetOutPath "$INSTDIR"
   SetOutPath "$INSTDIR"
   # Файлы
   # Файлы
   File "example.exe"
   File "example.exe"
   # Генерируем дизинÑ?талер
   # Генерируем дизин�?талер
   WriteUninstaller "$INSTDIR\Uninstall.exe"
   WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
SectionEnd


# СекциÑ? ДизинÑ?талера
# Секци�? Дизин�?талера
Section "Uninstall"
Section "Uninstall"
   Delete "$INSTDIR\example.exe"
   Delete "$INSTDIR\example.exe"
Line 86: Line 86:


Пример Ultra Modern оболочки:
Пример Ultra Modern оболочки:
# ИÑ?пользуем Modern оболочку
# И�?пользуем Modern оболочку
!include "UMUI.nsh"
!include "UMUI.nsh"


# имÑ? инÑ?таллÑ?тора.
# им�? ин�?талл�?тора.
Name "Example Ultra Modern UI"
Name "Example Ultra Modern UI"
# Файл в который будет получен поÑ?ле компилÑ?ции
# Файл в который будет получен по�?ле компил�?ции
OutFile "example.exe"
OutFile "example.exe"
# Каталог в который будет в уÑ?тановлена программа.
# Каталог в который будет в у�?тановлена программа.
InstallDir "$PROGRAMFILES\Example Ultra Modern UI"
InstallDir "$PROGRAMFILES\Example Ultra Modern UI"


# Отображаемые Ñ?траници
# Отображаемые �?траници
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES


# СекциÑ? уÑ?тановки
# Секци�? у�?тановки
Section "Main"
Section "Main"
   # Каталог назначениÑ?.
   # Каталог назначени�?.
   SetOutPath "$INSTDIR"
   SetOutPath "$INSTDIR"
   # Файлы
   # Файлы
   File "example.exe"
   File "example.exe"
   # Генерируем дизинÑ?талер
   # Генерируем дизин�?талер
   WriteUninstaller "$INSTDIR\Uninstall.exe"
   WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
SectionEnd


# СекциÑ? ДизинÑ?талера
# Секци�? Дизин�?талера
Section "Uninstall"
Section "Uninstall"
   Delete "$INSTDIR\example.exe"
   Delete "$INSTDIR\example.exe"

Revision as of 18:40, 21 January 2006

Author: zimsms (talk, contrib)


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


Пример �?тандартной оболочки:
# им�? ин�?талл�?тора.
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

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