6fbf66fa |
; **************************************************************************** |
564a2109 |
; * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. * |
6fbf66fa |
; * This program is free software; you can redistribute it and/or modify *
; * it under the terms of the GNU General Public License version 2 *
; * as published by the Free Software Foundation. *
; ****************************************************************************
; OpenVPN install script for Windows, using NSIS
|
bb8f4780 |
SetCompressor lzma
|
6fbf66fa |
!include "MUI.nsh" |
63903a82 |
!include "defs.nsi"
!include "guidefs.nsi"
!include "xguidefs.nsi" |
6fbf66fa |
!include "setpath.nsi" |
ee313a97 |
!include "GetWindowsVersion.nsi" |
63c5d785 |
!ifdef EXTRACT_FILES
!include "MultiFileExtract.nsi"
!endif |
6fbf66fa |
|
63903a82 |
!define GEN ".."
!define BIN "${GEN}\bin"
!define LIB "${GEN}\lib"
|
cefe973e |
; Which GUI to use (XGUI has priority).
; We will define either USE_XGUI (XML-based version) or
; USE_GUI (Mathias Sundman version) but not both.
!ifdef OPENVPN_XGUI_DEFINED
!define USE_XGUI
!else
!ifdef OPENVPN_GUI_DEFINED
!define USE_GUI
!endif
!endif
|
657ecf14 |
!define PRODUCT_ICON "icon.ico"
|
cefe973e |
!ifdef USE_XGUI
!define XGUI_POSTFIX "X"
!else
!define XGUI_POSTFIX ""
!endif
|
657ecf14 |
!ifdef PRODUCT_TAP_DEBUG |
cefe973e |
!define DBG_POSTFIX "-DBG" |
657ecf14 |
!else |
cefe973e |
!define DBG_POSTFIX "" |
657ecf14 |
!endif |
6fbf66fa |
|
cefe973e |
!define VERSION "${PRODUCT_VERSION}${XGUI_POSTFIX}${DBG_POSTFIX}"
|
657ecf14 |
!define TAP "${PRODUCT_TAP_ID}" |
6fbf66fa |
!define TAPDRV "${TAP}.sys"
; Default service settings
!define SERV_CONFIG_DIR "$INSTDIR\config" |
657ecf14 |
!define SERV_CONFIG_EXT "${PRODUCT_FILE_EXT}"
!define SERV_EXE_PATH "$INSTDIR\bin\${PRODUCT_UNIX_NAME}.exe" |
6fbf66fa |
!define SERV_LOG_DIR "$INSTDIR\log"
!define SERV_PRIORITY "NORMAL_PRIORITY_CLASS"
!define SERV_LOG_APPEND "0"
|
cefe973e |
; XGUI variables
!define XGUI_EXE ovpn-xgui-en.exe
!define XGUI_TRAY ovpn-tray.exe
!define XGUI_XMLSERV ovpn-xmlserv.exe
!define XGUI_HTDOCS htdocs
|
9ca8f3cf |
!define XGUI_AJAX_GUI_NAME "${PRODUCT_NAME} Ajax GUI"
!define XGUI_TRANSITION_GUI_NAME "${PRODUCT_NAME} Transitional GUI" |
cefe973e |
|
6fbf66fa |
;--------------------------------
;Configuration
;General
|
63903a82 |
OutFile "${GEN}\${PRODUCT_UNIX_NAME}-${VERSION}${OUTFILE_LABEL}-install.exe" |
6fbf66fa |
ShowInstDetails show
ShowUninstDetails show
;Folder selection page
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
;Remember install folder
InstallDirRegKey HKCU "Software\${PRODUCT_NAME}" ""
;--------------------------------
;Modern UI Configuration
Name "${PRODUCT_NAME} ${VERSION} ${TITLE_LABEL}"
|
657ecf14 |
!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of ${PRODUCT_NAME}, an Open Source VPN package by James Yonan.\r\n\r\nNote that the Windows version of ${PRODUCT_NAME} will only run on Win 2000, XP, or higher.\r\n\r\n\r\n" |
6fbf66fa |
|
657ecf14 |
!define MUI_COMPONENTSPAGE_TEXT_TOP "Select the components to install/upgrade. Stop any ${PRODUCT_NAME} processes or the ${PRODUCT_NAME} service if it is running. All DLLs are installed locally." |
6fbf66fa |
!define MUI_COMPONENTSPAGE_SMALLDESC |
9ca8f3cf |
!ifdef USE_XGUI
!define MUI_FINISHPAGE_SHOWREADME "http://openvpn.net/"
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!else
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\INSTALL-win32.txt"
!endif |
6fbf66fa |
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_ABORTWARNING |
63903a82 |
!define MUI_ICON "${GEN}\images\${PRODUCT_ICON}"
!define MUI_UNICON "${GEN}\images\${PRODUCT_ICON}" |
6fbf66fa |
!define MUI_HEADERIMAGE |
63903a82 |
!define MUI_HEADERIMAGE_BITMAP "${GEN}\images\install-whirl.bmp" |
6fbf66fa |
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
!insertmacro MUI_PAGE_WELCOME |
63082c8a |
!insertmacro MUI_PAGE_LICENSE "${GEN}\text\license.txt" |
6fbf66fa |
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Language Strings
|
657ecf14 |
LangString DESC_SecOpenVPNUserSpace ${LANG_ENGLISH} "Install ${PRODUCT_NAME} user-space components, including ${PRODUCT_UNIX_NAME}.exe." |
6fbf66fa |
|
cefe973e |
!ifdef USE_GUI |
657ecf14 |
LangString DESC_SecOpenVPNGUI ${LANG_ENGLISH} "Install ${PRODUCT_NAME} GUI by Mathias Sundman" |
72394778 |
!endif
|
cefe973e |
!ifdef USE_XGUI
LangString DESC_SecOpenVPNXGUI ${LANG_ENGLISH} "Install ${PRODUCT_NAME} XML-based GUI"
!endif
|
657ecf14 |
LangString DESC_SecOpenVPNEasyRSA ${LANG_ENGLISH} "Install ${PRODUCT_NAME} RSA scripts for X509 certificate management." |
6fbf66fa |
LangString DESC_SecOpenSSLDLLs ${LANG_ENGLISH} "Install OpenSSL DLLs locally (may be omitted if DLLs are already installed globally)."
|
44b3dcc8 |
LangString DESC_SecPKCS11DLLs ${LANG_ENGLISH} "Install PKCS#11 helper DLLs locally (may be omitted if DLLs are already installed globally)." |
718526e0 |
|
cefe973e |
LangString DESC_SecTAP ${LANG_ENGLISH} "Install/Upgrade the TAP virtual device driver. Will not interfere with CIPE." |
6fbf66fa |
|
657ecf14 |
LangString DESC_SecService ${LANG_ENGLISH} "Install the ${PRODUCT_NAME} service wrapper (${PRODUCT_UNIX_NAME}serv.exe)" |
6fbf66fa |
LangString DESC_SecOpenSSLUtilities ${LANG_ENGLISH} "Install the OpenSSL Utilities (used for generating public/private key pairs)."
|
657ecf14 |
LangString DESC_SecAddPath ${LANG_ENGLISH} "Add ${PRODUCT_NAME} executable directory to the current user's PATH." |
6fbf66fa |
|
657ecf14 |
LangString DESC_SecAddShortcuts ${LANG_ENGLISH} "Add ${PRODUCT_NAME} shortcuts to the current user's Start Menu." |
6fbf66fa |
|
657ecf14 |
LangString DESC_SecFileAssociation ${LANG_ENGLISH} "Register ${PRODUCT_NAME} config file association (*.${SERV_CONFIG_EXT})" |
6fbf66fa |
;--------------------------------
;Reserve Files
;Things that need to be extracted on first (keep these lines before any File command!)
;Only useful for BZIP2 compression
|
63903a82 |
ReserveFile "${GEN}\images\install-whirl.bmp" |
6fbf66fa |
;--------------------------------
;Macros
!macro WriteRegStringIfUndef ROOT SUBKEY KEY VALUE
Push $R0
ReadRegStr $R0 "${ROOT}" "${SUBKEY}" "${KEY}"
StrCmp $R0 "" +1 +2
WriteRegStr "${ROOT}" "${SUBKEY}" "${KEY}" '${VALUE}'
Pop $R0
!macroend
!macro DelRegStringIfUnchanged ROOT SUBKEY KEY VALUE
Push $R0
ReadRegStr $R0 "${ROOT}" "${SUBKEY}" "${KEY}"
StrCmp $R0 '${VALUE}' +1 +2
DeleteRegValue "${ROOT}" "${SUBKEY}" "${KEY}"
Pop $R0
!macroend
!macro DelRegKeyIfUnchanged ROOT SUBKEY VALUE
Push $R0
ReadRegStr $R0 "${ROOT}" "${SUBKEY}" ""
StrCmp $R0 '${VALUE}' +1 +2
DeleteRegKey "${ROOT}" "${SUBKEY}"
Pop $R0
!macroend
!macro DelRegKeyIfEmpty ROOT SUBKEY
Push $R0
EnumRegValue $R0 "${ROOT}" "${SUBKEY}" 1
StrCmp $R0 "" +1 +2
DeleteRegKey /ifempty "${ROOT}" "${SUBKEY}"
Pop $R0
!macroend
;------------------------------------------
;Set reboot flag based on tapinstall return
Function CheckReboot
IntCmp $R0 1 "" noreboot noreboot
IntOp $R0 0 & 0
SetRebootFlag true
DetailPrint "REBOOT flag set"
noreboot:
FunctionEnd
;--------------------------------
;Installer Sections
Function .onInit
ClearErrors |
ee313a97 |
# Verify that user has admin privs |
6fbf66fa |
UserInfo::GetName
IfErrors ok
Pop $R0
UserInfo::GetAccountType
Pop $R1
StrCmp $R1 "Admin" ok |
657ecf14 |
Messagebox MB_OK "Administrator privileges required to install ${PRODUCT_NAME} [$R0/$R1]" |
6fbf66fa |
Abort
ok: |
ee313a97 |
|
ca637afb |
# Delete previous start menu
RMDir /r $SMPROGRAMS\${PRODUCT_NAME}
|
63c9b497 |
!ifdef CHECK_WINDOWS_VERSION |
ca637afb |
# Check windows version |
ee313a97 |
Call GetWindowsVersion
Pop $1
StrCmp $1 "2000" goodwinver
StrCmp $1 "XP" goodwinver
StrCmp $1 "2003" goodwinver
StrCmp $1 "VISTA" goodwinver
|
657ecf14 |
Messagebox MB_OK "Sorry, ${PRODUCT_NAME} does not currently support Windows $1" |
ee313a97 |
Abort
goodwinver:
System::Call "kernel32::GetCurrentProcess() i .s"
System::Call "kernel32::IsWow64Process(i s, *i .r0)"
IntCmp $0 0 init32bits
; we are running on 64-bit windows
StrCmp $1 "VISTA" vista64bummer
|
657ecf14 |
# Messagebox MB_OK "Sorry, ${PRODUCT_NAME} doesn't currently support 64-bit Windows." |
c833aa11 |
# Abort |
ee313a97 |
vista64bummer:
|
657ecf14 |
# Messagebox MB_OK "Sorry, ${PRODUCT_NAME} doesn't currently support 64-bit Vista because Microsoft doesn't allow the installation of 64 bit unsigned drivers." |
c833aa11 |
# Abort |
ee313a97 |
init32bits:
|
63c9b497 |
!endif
|
6fbf66fa |
FunctionEnd
|
63c9b497 |
!ifndef SF_SELECTED |
6fbf66fa |
!define SF_SELECTED 1 |
63c9b497 |
!endif |
6fbf66fa |
|
cefe973e |
;--------------------
;Pre-install section
Section -pre
; Stop OpenVPN if currently running
DetailPrint "Previous Service REMOVE (if exists)"
nsExec::ExecToLog '"$INSTDIR\bin\${PRODUCT_UNIX_NAME}serv.exe" -remove'
Pop $R0 # return value/error/timeout
!ifdef USE_XGUI
DetailPrint "Previous XML Service REMOVE (if exists)"
nsExec::ExecToLog '"$INSTDIR\bin\${XGUI_XMLSERV}" -remove'
Pop $R0 # return value/error/timeout
!endif
Sleep 3000
SectionEnd
|
657ecf14 |
Section "${PRODUCT_NAME} User-Space Components" SecOpenVPNUserSpace |
6fbf66fa |
SetOverwrite on
SetOutPath "$INSTDIR\bin"
|
657ecf14 |
File "${BIN}\${PRODUCT_UNIX_NAME}.exe" |
6fbf66fa |
SectionEnd
|
cefe973e |
!ifdef USE_GUI |
657ecf14 |
Section "${PRODUCT_NAME} GUI" SecOpenVPNGUI |
72394778 |
SetOverwrite on
SetOutPath "$INSTDIR\bin"
|
657ecf14 |
File "${BIN}\${OPENVPN_GUI}" |
72394778 |
SectionEnd
!endif
|
cefe973e |
!ifdef USE_XGUI
Section "${PRODUCT_NAME} XML-based GUI" SecOpenVPNXGUI
SetOverwrite on
SetOutPath "$INSTDIR\bin"
File "${BIN}\${XGUI_EXE}"
File "${BIN}\${XGUI_TRAY}"
File "${BIN}\${XGUI_XMLSERV}"
SetOutPath "$INSTDIR\${XGUI_HTDOCS}"
File "${GEN}\${XGUI_HTDOCS}\*.*"
SectionEnd
!endif
|
657ecf14 |
Section "${PRODUCT_NAME} RSA Certificate Management Scripts" SecOpenVPNEasyRSA |
6fbf66fa |
SetOverwrite on
SetOutPath "$INSTDIR\easy-rsa"
|
63903a82 |
File "${GEN}\easy-rsa\openssl.cnf.sample"
File "${GEN}\easy-rsa\vars.bat.sample" |
6fbf66fa |
|
63903a82 |
File "${GEN}\easy-rsa\init-config.bat" |
6fbf66fa |
|
63903a82 |
File "${GEN}\easy-rsa\README.txt"
File "${GEN}\easy-rsa\build-ca.bat"
File "${GEN}\easy-rsa\build-dh.bat"
File "${GEN}\easy-rsa\build-key-server.bat"
File "${GEN}\easy-rsa\build-key.bat"
File "${GEN}\easy-rsa\build-key-pkcs12.bat"
File "${GEN}\easy-rsa\clean-all.bat"
File "${GEN}\easy-rsa\index.txt.start"
File "${GEN}\easy-rsa\revoke-full.bat"
File "${GEN}\easy-rsa\serial.start" |
6fbf66fa |
SectionEnd
|
657ecf14 |
Section "${PRODUCT_NAME} Service" SecService |
6fbf66fa |
SetOverwrite on
SetOutPath "$INSTDIR\bin" |
657ecf14 |
File "${BIN}\${PRODUCT_UNIX_NAME}serv.exe" |
6fbf66fa |
SetOutPath "$INSTDIR\config"
FileOpen $R0 "$INSTDIR\config\README.txt" w |
657ecf14 |
FileWrite $R0 "This directory should contain ${PRODUCT_NAME} configuration files$\r$\n" |
6fbf66fa |
FileWrite $R0 "each having an extension of .${SERV_CONFIG_EXT}$\r$\n"
FileWrite $R0 "$\r$\n" |
657ecf14 |
FileWrite $R0 "When ${PRODUCT_NAME} is started as a service, a separate ${PRODUCT_NAME}$\r$\n" |
6fbf66fa |
FileWrite $R0 "process will be instantiated for each configuration file.$\r$\n"
FileClose $R0
SetOutPath "$INSTDIR\sample-config" |
63082c8a |
File "${GEN}\samples\sample.${SERV_CONFIG_EXT}"
File "${GEN}\samples\client.${SERV_CONFIG_EXT}"
File "${GEN}\samples\server.${SERV_CONFIG_EXT}" |
6fbf66fa |
CreateDirectory "$INSTDIR\log"
FileOpen $R0 "$INSTDIR\log\README.txt" w |
657ecf14 |
FileWrite $R0 "This directory will contain the log files for ${PRODUCT_NAME}$\r$\n" |
6fbf66fa |
FileWrite $R0 "sessions which are being run as a service.$\r$\n"
FileClose $R0
SectionEnd
|
657ecf14 |
Section "${PRODUCT_NAME} File Associations" SecFileAssociation |
6fbf66fa |
SectionEnd
Section "OpenSSL DLLs" SecOpenSSLDLLs
SetOverwrite on
SetOutPath "$INSTDIR\bin" |
63082c8a |
File "${LIB}\libeay32.dll"
File "${LIB}\libssl32.dll" |
6fbf66fa |
SectionEnd
Section "OpenSSL Utilities" SecOpenSSLUtilities
SetOverwrite on
SetOutPath "$INSTDIR\bin"
File "${BIN}\openssl.exe"
SectionEnd
|
718526e0 |
Section "PKCS#11 DLLs" SecPKCS11DLLs
SetOverwrite on
SetOutPath "$INSTDIR\bin" |
63082c8a |
File "${LIB}\libpkcs11-helper-1.dll" |
718526e0 |
SectionEnd
|
cefe973e |
Section "TAP Virtual Ethernet Adapter" SecTAP |
6fbf66fa |
SetOverwrite on
FileOpen $R0 "$INSTDIR\bin\addtap.bat" w |
cefe973e |
FileWrite $R0 "rem Add a new TAP virtual ethernet adapter$\r$\n" |
6fbf66fa |
FileWrite $R0 '"$INSTDIR\bin\tapinstall.exe" install "$INSTDIR\driver\OemWin2k.inf" ${TAP}$\r$\n'
FileWrite $R0 "pause$\r$\n"
FileClose $R0
FileOpen $R0 "$INSTDIR\bin\deltapall.bat" w |
cefe973e |
FileWrite $R0 "echo WARNING: this script will delete ALL TAP virtual adapters (use the device manager to delete adapters one at a time)$\r$\n" |
6fbf66fa |
FileWrite $R0 "pause$\r$\n"
FileWrite $R0 '"$INSTDIR\bin\tapinstall.exe" remove ${TAP}$\r$\n'
FileWrite $R0 "pause$\r$\n"
FileClose $R0
|
d1270d07 |
; Check if we are running on a 64 bit system.
System::Call "kernel32::GetCurrentProcess() i .s"
System::Call "kernel32::IsWow64Process(i s, *i .r0)"
IntCmp $0 0 tap-32bit
; tap-64bit:
DetailPrint "We are running on a 64-bit system."
|
464d33ae |
SetOutPath "$INSTDIR\bin"
|
63082c8a |
File "${GEN}\tapinstall\amd64\tapinstall.exe" |
464d33ae |
|
d1270d07 |
SetOutPath "$INSTDIR\driver" |
464d33ae |
|
63082c8a |
File "${GEN}\driver\amd64\OemWin2k.inf"
File "${GEN}\driver\amd64\${PRODUCT_TAP_ID}.cat"
File "${GEN}\driver\amd64\${TAPDRV}" |
ee313a97 |
goto tapend |
d1270d07 |
tap-32bit:
DetailPrint "We are running on a 32-bit system."
|
464d33ae |
SetOutPath "$INSTDIR\bin" |
63082c8a |
File "${GEN}\tapinstall\i386\tapinstall.exe" |
464d33ae |
|
6fbf66fa |
SetOutPath "$INSTDIR\driver" |
63082c8a |
File "${GEN}\driver\i386\OemWin2k.inf"
File "${GEN}\driver\i386\${PRODUCT_TAP_ID}.cat"
File "${GEN}\driver\i386\${TAPDRV}" |
6fbf66fa |
|
464d33ae |
tapend: |
d1270d07 |
|
6fbf66fa |
SectionEnd
|
657ecf14 |
Section "Add ${PRODUCT_NAME} to PATH" SecAddPath |
6fbf66fa |
; remove previously set path (if any)
Push "$INSTDIR\bin"
Call RemoveFromPath
; append our bin directory to end of current user path
Push "$INSTDIR\bin"
Call AddToPath
SectionEnd
Section "Add Shortcuts to Start Menu" SecAddShortcuts
SetOverwrite on |
657ecf14 |
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" |
ca637afb |
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\Documentation"
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Documentation\${PRODUCT_NAME} Windows Notes.url" "InternetShortcut" "URL" "http://openvpn.net/INSTALL-win32.html"
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Documentation\${PRODUCT_NAME} Manual Page.url" "InternetShortcut" "URL" "http://openvpn.net/man.html"
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Documentation\${PRODUCT_NAME} HOWTO.url" "InternetShortcut" "URL" "http://openvpn.net/howto.html"
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Documentation\${PRODUCT_NAME} Web Site.url" "InternetShortcut" "URL" "http://openvpn.net/" |
657ecf14 |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall ${PRODUCT_NAME}.lnk" "$INSTDIR\Uninstall.exe" |
6fbf66fa |
SectionEnd
;--------------------
;Post-install section
Section -post
|
cefe973e |
SetOverwrite on
|
6fbf66fa |
; delete old devcon.exe
Delete "$INSTDIR\bin\devcon.exe"
|
cefe973e |
; Store README, license, icon
SetOverwrite on
SetOutPath $INSTDIR |
9ca8f3cf |
!ifndef USE_XGUI
File "${GEN}\text\INSTALL-win32.txt"
!endif |
cefe973e |
File "${GEN}\text\license.txt" |
63903a82 |
File "${GEN}\images\${PRODUCT_ICON}" |
cefe973e |
; store sample config files
!ifdef SAMPCONF_DIR
SetOverwrite on
SetOutPath "$INSTDIR\config"
!ifdef SAMPCONF_CONF |
63903a82 |
File "${GEN}\conf\${SAMPCONF_CONF}" |
cefe973e |
!endif |
9bf6e9ac |
!ifdef SAMPCONF_CONF2
File "${GEN}\conf\${SAMPCONF_CONF2}"
!endif |
cefe973e |
!ifdef SAMPCONF_P12 |
63903a82 |
File "${GEN}\conf\${SAMPCONF_P12}" |
cefe973e |
!endif
!ifdef SAMPCONF_TA |
63903a82 |
File "${GEN}\conf\${SAMPCONF_TA}"
!endif
!ifdef SAMPCONF_CA
File "${GEN}\conf\${SAMPCONF_CA}"
!endif
!ifdef SAMPCONF_CRT
File "${GEN}\conf\${SAMPCONF_CRT}"
!endif
!ifdef SAMPCONF_KEY
File "${GEN}\conf\${SAMPCONF_KEY}" |
cefe973e |
!endif |
9bf6e9ac |
!ifdef SAMPCONF_DH
File "${GEN}\conf\${SAMPCONF_DH}"
!endif |
cefe973e |
!endif
|
63c5d785 |
; Try to extract files if present
!ifdef EXTRACT_FILES
Push "$INSTDIR"
Call MultiFileExtract |
bb8f4780 |
Pop $R0
IntCmp $R0 0 +3 +1 +1 |
63c5d785 |
DetailPrint "MultiFileExtract Failed status=$R0" |
bb8f4780 |
goto +2 |
63c5d785 |
DetailPrint "MultiFileExtract Succeeded" |
bb8f4780 |
!endif
|
6fbf66fa |
; |
cefe973e |
; install/upgrade TAP driver if selected, using tapinstall.exe |
6fbf66fa |
;
SectionGetFlags ${SecTAP} $R0
IntOp $R0 $R0 & ${SF_SELECTED}
IntCmp $R0 ${SF_SELECTED} "" notap notap
; TAP install/update was selected.
; Should we install or update?
; If tapinstall error occurred, $5 will
; be nonzero.
IntOp $5 0 & 0
nsExec::ExecToStack '"$INSTDIR\bin\tapinstall.exe" hwids ${TAP}'
Pop $R0 # return value/error/timeout
IntOp $5 $5 | $R0
DetailPrint "tapinstall hwids returned: $R0"
; If tapinstall output string contains "${TAP}" we assume
; that TAP device has been previously installed,
; therefore we will update, not install.
Push "${TAP}"
Call StrStr
Pop $R0
IntCmp $5 0 "" tapinstall_check_error tapinstall_check_error
IntCmp $R0 -1 tapinstall
;tapupdate: |
cefe973e |
DetailPrint "TAP UPDATE" |
6fbf66fa |
nsExec::ExecToLog '"$INSTDIR\bin\tapinstall.exe" update "$INSTDIR\driver\OemWin2k.inf" ${TAP}'
Pop $R0 # return value/error/timeout
Call CheckReboot
IntOp $5 $5 | $R0
DetailPrint "tapinstall update returned: $R0"
Goto tapinstall_check_error
tapinstall: |
cefe973e |
DetailPrint "TAP REMOVE OLD TAP" |
ee313a97 |
nsExec::ExecToLog '"$INSTDIR\bin\tapinstall.exe" remove TAP0801' |
6fbf66fa |
Pop $R0 # return value/error/timeout |
ee313a97 |
DetailPrint "tapinstall remove TAP0801 returned: $R0" |
6fbf66fa |
|
cefe973e |
DetailPrint "TAP INSTALL (${TAP})" |
6fbf66fa |
nsExec::ExecToLog '"$INSTDIR\bin\tapinstall.exe" install "$INSTDIR\driver\OemWin2k.inf" ${TAP}'
Pop $R0 # return value/error/timeout
Call CheckReboot
IntOp $5 $5 | $R0
DetailPrint "tapinstall install returned: $R0"
tapinstall_check_error:
DetailPrint "tapinstall cumulative status: $5"
IntCmp $5 0 notap |
cefe973e |
MessageBox MB_OK "An error occurred installing the TAP device driver." |
6fbf66fa |
notap:
; Store install folder in registry |
657ecf14 |
WriteRegStr HKLM SOFTWARE\${PRODUCT_NAME} "" $INSTDIR |
6fbf66fa |
; install as a service if requested
SectionGetFlags ${SecService} $R0
IntOp $R0 $R0 & ${SF_SELECTED}
IntCmp $R0 ${SF_SELECTED} "" noserv noserv
; set registry parameters for openvpnserv |
657ecf14 |
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "config_dir" "${SERV_CONFIG_DIR}"
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "config_ext" "${SERV_CONFIG_EXT}"
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "exe_path" "${SERV_EXE_PATH}"
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "log_dir" "${SERV_LOG_DIR}"
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "priority" "${SERV_PRIORITY}"
!insertmacro WriteRegStringIfUndef HKLM "SOFTWARE\${PRODUCT_NAME}" "log_append" "${SERV_LOG_APPEND}" |
6fbf66fa |
|
cefe973e |
; install openvpnserv as a service (to be started manually from service control manager) |
6fbf66fa |
DetailPrint "Service INSTALL" |
657ecf14 |
nsExec::ExecToLog '"$INSTDIR\bin\${PRODUCT_UNIX_NAME}serv.exe" -install' |
6fbf66fa |
Pop $R0 # return value/error/timeout
noserv: |
cefe973e |
!ifdef USE_XGUI
IfFileExists "$INSTDIR\bin\${XGUI_XMLSERV}" "" fileass
; install and automatically start XML service
DetailPrint "XML Service INSTALL"
nsExec::ExecToLog '"$INSTDIR\bin\${XGUI_XMLSERV}" -install'
Pop $R0 # return value/error/timeout
Sleep 2000
DetailPrint "XML Service START"
nsExec::ExecToLog '"$INSTDIR\bin\${XGUI_XMLSERV}" -start'
Pop $R0 # return value/error/timeout |
6fbf66fa |
|
ca637afb |
!endif |
2f775b1a |
|
6fbf66fa |
; Create file association if requested |
cefe973e |
fileass: |
6fbf66fa |
SectionGetFlags ${SecFileAssociation} $R0
IntOp $R0 $R0 & ${SF_SELECTED}
IntCmp $R0 ${SF_SELECTED} "" noass noass |
657ecf14 |
WriteRegStr HKCR ".${SERV_CONFIG_EXT}" "" "${PRODUCT_NAME}File"
WriteRegStr HKCR "${PRODUCT_NAME}File" "" "${PRODUCT_NAME} Config File"
WriteRegStr HKCR "${PRODUCT_NAME}File\shell" "" "open"
WriteRegStr HKCR "${PRODUCT_NAME}File\DefaultIcon" "" "$INSTDIR\${PRODUCT_ICON},0"
WriteRegStr HKCR "${PRODUCT_NAME}File\shell\open\command" "" 'notepad.exe "%1"'
WriteRegStr HKCR "${PRODUCT_NAME}File\shell\run" "" "Start ${PRODUCT_NAME} on this config file"
WriteRegStr HKCR "${PRODUCT_NAME}File\shell\run\command" "" '"$INSTDIR\bin\${PRODUCT_UNIX_NAME}.exe" --pause-exit --config "%1"' |
6fbf66fa |
|
ca637afb |
; Create start menu folders |
6fbf66fa |
noass: |
ca637afb |
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\Utilities"
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\Shortcuts"
|
cefe973e |
; Create start menu and desktop shortcuts to OpenVPN GUI
!ifdef USE_GUI
IfFileExists "$INSTDIR\bin\${OPENVPN_GUI}" "" tryaddxgui |
657ecf14 |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} GUI.lnk" "$INSTDIR\bin\${OPENVPN_GUI}" ""
CreateShortcut "$DESKTOP\${PRODUCT_NAME} GUI.lnk" "$INSTDIR\bin\${OPENVPN_GUI}" |
72394778 |
!endif
|
cefe973e |
; Create start menu and desktop shortcuts to OpenVPN XGUI
tryaddxgui:
!ifdef USE_XGUI
IfFileExists "$INSTDIR\bin\${XGUI_EXE}" "" tryaddtray |
9ca8f3cf |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${XGUI_TRANSITION_GUI_NAME}.lnk" "$INSTDIR\bin\${XGUI_EXE}" ""
# CreateShortcut "$DESKTOP\${XGUI_TRANSITION_GUI_NAME}.lnk" "$INSTDIR\bin\${XGUI_EXE}" |
cefe973e |
tryaddtray:
IfFileExists "$INSTDIR\bin\${XGUI_TRAY}" "" tryaddtap
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${XGUI_AJAX_GUI_NAME}.lnk" "$INSTDIR\bin\${XGUI_EXE}" ""
CreateShortcut "$DESKTOP\${XGUI_AJAX_GUI_NAME}.lnk" "$INSTDIR\bin\${XGUI_TRAY}"
!endif
|
72394778 |
; Create start menu shortcuts to addtap.bat and deltapall.bat
tryaddtap: |
6fbf66fa |
IfFileExists "$INSTDIR\bin\addtap.bat" "" trydeltap |
cefe973e |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Utilities\Add a new TAP virtual ethernet adapter.lnk" "$INSTDIR\bin\addtap.bat" "" |
6fbf66fa |
trydeltap:
IfFileExists "$INSTDIR\bin\deltapall.bat" "" config_shortcut |
cefe973e |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Utilities\Delete ALL TAP virtual ethernet adapters.lnk" "$INSTDIR\bin\deltapall.bat" "" |
6fbf66fa |
; Create start menu shortcuts for config and log directories
config_shortcut:
IfFileExists "$INSTDIR\config" "" log_shortcut |
ca637afb |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Shortcuts\${PRODUCT_NAME} configuration file directory.lnk" "$INSTDIR\config" "" |
6fbf66fa |
log_shortcut:
IfFileExists "$INSTDIR\log" "" samp_shortcut |
ca637afb |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Shortcuts\${PRODUCT_NAME} log file directory.lnk" "$INSTDIR\log" "" |
6fbf66fa |
samp_shortcut:
IfFileExists "$INSTDIR\sample-config" "" genkey_shortcut |
ca637afb |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Shortcuts\${PRODUCT_NAME} Sample Configuration Files.lnk" "$INSTDIR\sample-config" "" |
6fbf66fa |
genkey_shortcut: |
657ecf14 |
IfFileExists "$INSTDIR\bin\${PRODUCT_UNIX_NAME}.exe" "" noshortcuts |
6fbf66fa |
IfFileExists "$INSTDIR\config" "" noshortcuts |
ca637afb |
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Utilities\Generate a static ${PRODUCT_NAME} key.lnk" "$INSTDIR\bin\${PRODUCT_UNIX_NAME}.exe" '--pause-exit --verb 3 --genkey --secret "$INSTDIR\config\key.txt"' "$INSTDIR\${PRODUCT_ICON}" 0 |
6fbf66fa |
noshortcuts:
; Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
; Show up in Add/Remove programs
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME} ${VERSION}"
WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" "$INSTDIR\Uninstall.exe" |
657ecf14 |
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\${PRODUCT_ICON}" |
6fbf66fa |
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayVersion" "${VERSION}"
; Advise a reboot |
cefe973e |
;Messagebox MB_OK "IMPORTANT: Rebooting the system is advised in order to finalize TAP driver installation/upgrade (this is an informational message only, pressing OK will not reboot)." |
6fbf66fa |
SectionEnd
;--------------------------------
;Descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenVPNUserSpace} $(DESC_SecOpenVPNUserSpace) |
cefe973e |
!ifdef USE_GUI |
72394778 |
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenVPNGUI} $(DESC_SecOpenVPNGUI)
!endif |
cefe973e |
!ifdef USE_XGUI
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenVPNXGUI} $(DESC_SecOpenVPNXGUI)
!endif |
6fbf66fa |
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenVPNEasyRSA} $(DESC_SecOpenVPNEasyRSA)
!insertmacro MUI_DESCRIPTION_TEXT ${SecTAP} $(DESC_SecTAP)
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenSSLUtilities} $(DESC_SecOpenSSLUtilities)
!insertmacro MUI_DESCRIPTION_TEXT ${SecOpenSSLDLLs} $(DESC_SecOpenSSLDLLs) |
718526e0 |
!insertmacro MUI_DESCRIPTION_TEXT ${SecPKCS11DLLs} $(DESC_SecPKCS11DLLs) |
6fbf66fa |
!insertmacro MUI_DESCRIPTION_TEXT ${SecAddPath} $(DESC_SecAddPath)
!insertmacro MUI_DESCRIPTION_TEXT ${SecAddShortcuts} $(DESC_SecAddShortcuts)
!insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService)
!insertmacro MUI_DESCRIPTION_TEXT ${SecFileAssociation} $(DESC_SecFileAssociation)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Function un.onInit
ClearErrors
UserInfo::GetName
IfErrors ok
Pop $R0
UserInfo::GetAccountType
Pop $R1
StrCmp $R1 "Admin" ok |
657ecf14 |
Messagebox MB_OK "Administrator privileges required to uninstall ${PRODUCT_NAME} [$R0/$R1]" |
6fbf66fa |
Abort
ok:
FunctionEnd
Section "Uninstall"
|
cefe973e |
!ifdef USE_XGUI
DetailPrint "XML Service REMOVE"
nsExec::ExecToLog '"$INSTDIR\bin\${XGUI_XMLSERV}" -remove'
Pop $R0 # return value/error/timeout
!endif
|
9ca8f3cf |
; Stop OpenVPN if currently running
DetailPrint "Service REMOVE"
nsExec::ExecToLog '"$INSTDIR\bin\${PRODUCT_UNIX_NAME}serv.exe" -remove'
Pop $R0 # return value/error/timeout
Sleep 3000 |
6fbf66fa |
|
cefe973e |
DetailPrint "TAP REMOVE" |
6fbf66fa |
nsExec::ExecToLog '"$INSTDIR\bin\tapinstall.exe" remove ${TAP}'
Pop $R0 # return value/error/timeout
DetailPrint "tapinstall remove returned: $R0"
Push "$INSTDIR\bin"
Call un.RemoveFromPath
|
657ecf14 |
RMDir /r $SMPROGRAMS\${PRODUCT_NAME} |
6fbf66fa |
|
ca637afb |
; delete sample config files
!ifdef SAMPCONF_DIR
!ifdef SAMPCONF_CONF
Delete "$INSTDIR\config\${SAMPCONF_CONF}"
!endif |
9bf6e9ac |
!ifdef SAMPCONF_CONF2
Delete "$INSTDIR\config\${SAMPCONF_CONF2}"
!endif |
ca637afb |
!ifdef SAMPCONF_P12
Delete "$INSTDIR\config\${SAMPCONF_P12}"
!endif
!ifdef SAMPCONF_TA
Delete "$INSTDIR\config\${SAMPCONF_TA}"
!endif |
63903a82 |
!ifdef SAMPCONF_CA
Delete "$INSTDIR\config\${SAMPCONF_CA}"
!endif
!ifdef SAMPCONF_CRT
Delete "$INSTDIR\config\${SAMPCONF_CRT}"
!endif
!ifdef SAMPCONF_KEY
Delete "$INSTDIR\config\${SAMPCONF_KEY}"
!endif |
9bf6e9ac |
!ifdef SAMPCONF_DH
Delete "$INSTDIR\config\${SAMPCONF_DH}"
!endif |
ca637afb |
!endif
|
cefe973e |
!ifdef USE_GUI |
72394778 |
Delete "$INSTDIR\bin\${OPENVPN_GUI}" |
52d84f6e |
Delete "$DESKTOP\${PRODUCT_NAME} GUI.lnk" |
72394778 |
!endif |
52d84f6e |
|
cefe973e |
!ifdef USE_XGUI
Delete "$INSTDIR\bin\${XGUI_EXE}"
Delete "$INSTDIR\bin\${XGUI_TRAY}"
Delete "$INSTDIR\bin\${XGUI_XMLSERV}"
RMDir /r "$INSTDIR\${XGUI_HTDOCS}"
Delete "$DESKTOP\${XGUI_AJAX_GUI_NAME}.lnk" |
9ca8f3cf |
Delete "$DESKTOP\${XGUI_TRANSITION_GUI_NAME}.lnk" |
cefe973e |
!endif
|
52d84f6e |
Delete "$INSTDIR\bin\${PRODUCT_UNIX_NAME}.exe" |
657ecf14 |
Delete "$INSTDIR\bin\${PRODUCT_UNIX_NAME}serv.exe" |
6fbf66fa |
Delete "$INSTDIR\bin\libeay32.dll"
Delete "$INSTDIR\bin\libssl32.dll" |
718526e0 |
Delete "$INSTDIR\bin\libpkcs11-helper-1.dll" |
6fbf66fa |
Delete "$INSTDIR\bin\tapinstall.exe"
Delete "$INSTDIR\bin\addtap.bat"
Delete "$INSTDIR\bin\deltapall.bat"
Delete "$INSTDIR\config\README.txt"
Delete "$INSTDIR\config\sample.${SERV_CONFIG_EXT}.txt"
Delete "$INSTDIR\log\README.txt"
Delete "$INSTDIR\driver\OemWin2k.inf" |
657ecf14 |
Delete "$INSTDIR\driver\${PRODUCT_TAP_ID}.cat" |
6fbf66fa |
Delete "$INSTDIR\driver\${TAPDRV}"
Delete "$INSTDIR\bin\openssl.exe"
Delete "$INSTDIR\INSTALL-win32.txt" |
657ecf14 |
Delete "$INSTDIR\${PRODUCT_ICON}" |
6fbf66fa |
Delete "$INSTDIR\license.txt"
Delete "$INSTDIR\Uninstall.exe"
Delete "$INSTDIR\easy-rsa\openssl.cnf.sample"
Delete "$INSTDIR\easy-rsa\vars.bat.sample"
Delete "$INSTDIR\easy-rsa\init-config.bat"
Delete "$INSTDIR\easy-rsa\README.txt"
Delete "$INSTDIR\easy-rsa\build-ca.bat"
Delete "$INSTDIR\easy-rsa\build-dh.bat"
Delete "$INSTDIR\easy-rsa\build-key-server.bat"
Delete "$INSTDIR\easy-rsa\build-key.bat"
Delete "$INSTDIR\easy-rsa\build-key-pkcs12.bat"
Delete "$INSTDIR\easy-rsa\clean-all.bat"
Delete "$INSTDIR\easy-rsa\index.txt.start"
Delete "$INSTDIR\easy-rsa\revoke-key.bat"
Delete "$INSTDIR\easy-rsa\revoke-full.bat"
Delete "$INSTDIR\easy-rsa\serial.start"
|
657ecf14 |
Delete "$INSTDIR\sample-config\*.${PRODUCT_FILE_EXT}" |
6fbf66fa |
RMDir "$INSTDIR\bin" |
ca637afb |
RMDir "$INSTDIR\config" |
6fbf66fa |
RMDir "$INSTDIR\driver"
RMDir "$INSTDIR\easy-rsa"
RMDir "$INSTDIR\sample-config" |
ca637afb |
RMDir /r "$INSTDIR\log" |
6fbf66fa |
RMDir "$INSTDIR"
|
657ecf14 |
!insertmacro DelRegKeyIfUnchanged HKCR ".${SERV_CONFIG_EXT}" "${PRODUCT_NAME}File"
DeleteRegKey HKCR "${PRODUCT_NAME}File"
DeleteRegKey HKLM SOFTWARE\${PRODUCT_NAME} |
6fbf66fa |
DeleteRegKey HKCU "Software\${PRODUCT_NAME}" |
657ecf14 |
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" |
6fbf66fa |
|
657ecf14 |
;Messagebox MB_OK "IMPORTANT: If you intend on reinstalling ${PRODUCT_NAME} after this uninstall, and you are running Win2K, you are strongly urged to reboot before reinstalling (this is an informational message only, pressing OK will not reboot)." |
6fbf66fa |
SectionEnd |