pykd/setup/pykd_setup_common.nsh
SND\air_max_cp 9f5a2ec9d4 [+] add setup script.
git-svn-id: https://pykd.svn.codeplex.com/svn@62250 9b283d60-5439-405e-af05-b73fd8c4d996
2011-03-05 20:19:18 +00:00

249 lines
10 KiB
Plaintext
Raw Blame History

#
# This is setup script for pykd project.
# Author: Maksim K. aka airmax
#
SetCompressor LZMA
# Modern interface settings
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "WinVer.nsh"
!include "FileFunc.nsh"
!include "x64.nsh"
!addincludedir .\Include
!addplugindir .\Plugins
!include "HasAssembly.nsh"
#------------------------------------------------------------------------------
# General
#------------------------------------------------------------------------------
!define PYTHON_VERSION "2.6"
!define PYTHON_URL_BASE "http://python.org/ftp/python/2.6.6/"
!define PRODUCT_SHORT_NAME "pykd"
!define PRODUCT_FULL_NAME "Python extension for WinDbg"
!define PRODUCT_VERSION "0.0.0.16"
!define PRODUCT_URL "http://pykd.codeplex.com/"
!define PRODUCT_NAME_AND_VERSION "${PRODUCT_FULL_NAME} ${PRODUCT_ARCH} ${PRODUCT_VERSION}"
!if ${PRODUCT_ARCH} == "x64"
!define ARCH "amd64"
!else
!define ARCH "x86"
!endif
# Main Install settings
Name "${PRODUCT_NAME_AND_VERSION}"
OutFile "${PRODUCT_SHORT_NAME}_${PRODUCT_ARCH}_${PRODUCT_VERSION}_setup.exe"
BrandingText "${PRODUCT_FULL_NAME}"
#Get installation folder from registry if available
InstallDirRegKey HKLM "Software\${PRODUCT_SHORT_NAME}" "${PRODUCT_ARCH}"
#Request application privileges for Windows Vista and 7
RequestExecutionLevel admin
ShowInstDetails show
#------------------------------------------------------------------------------
# Variables
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Interface Settings
#------------------------------------------------------------------------------
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp"
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"
!define MUI_DIRECTORYPAGE_TEXT_TOP "Please specify path to $\"winext$\" subfolder of Debugging Tools for Windows (${PRODUCT_ARCH})."
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Debugging Tools for Windows (${PRODUCT_ARCH})\winext folder"
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_FINISHPAGE_TEXT_LARGE
!define MUI_FINISHPAGE_TEXT "${PRODUCT_NAME_AND_VERSION} was successfully installed.$\n$\n\
Run WinDbg and type $\".load pykd.pyd$\" to start using plugin."
!define MUI_FINISHPAGE_NOAUTOCLOSE
#------------------------------------------------------------------------------
# Pages
#------------------------------------------------------------------------------
# Installer Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "pykd_license.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
#------------------------------------------------------------------------------
# Languages (first is default language)
#------------------------------------------------------------------------------
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_RESERVEFILE_LANGDLL
#------------------------------------------------------------------------------
# Installer file version information
#------------------------------------------------------------------------------
VIProductVersion "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_SHORT_NAME}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${PRODUCT_NAME_AND_VERSION}"
#VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${MANUFACTURER}"
#VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "${PRODUCT_NAME} is a trademark of ${MANUFACTURER} company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "<22> All rights reserved"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${PRODUCT_SHORT_NAME} setup"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}"
#------------------------------------------------------------------------------
# Before first page displayed
#------------------------------------------------------------------------------
Function .onInit
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${PRODUCT_SHORT_NAME}_${PRODUCT_ARCH}_setup") i .r1 ?e'
Pop $R0
${If} $R0 != 0
MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
Abort
${EndIf}
!if ${PRODUCT_ARCH} == "x64"
${IfNot} ${RunningX64}
MessageBox MB_OK|MB_ICONEXCLAMATION "This installation requires 64-bit OS."
Abort
${EndIf}
!endif
FunctionEnd
#------------------------------------------------------------------------------
# Check WinDbg executable presence in selected directory
#------------------------------------------------------------------------------
Function .onVerifyInstDir
${IfNotThen} ${FileExists} "$INSTDIR\..\WinDbg.exe" ${|} Abort ${|}
${GetFileName} "$INSTDIR" $R0
${IfThen} $R0 != "WinExt" ${|} Abort ${|}
FunctionEnd
#------------------------------------------------------------------------------
# Installer Sections
#------------------------------------------------------------------------------
Section "${PRODUCT_SHORT_NAME}" Section1
DetailPrint "Check Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library..."
push 'msvcr80.dll'
#push 'Microsoft.VC80.CRT,version="8.0.50727.4027",type="win32",processorArchitecture="${ARCH}",publicKeyToken="1fc8b3b9a1e18e3b"'
push 'Microsoft.VC80.CRT,version="8.0.50727.4053",type="win32",processorArchitecture="${ARCH}",publicKeyToken="1fc8b3b9a1e18e3b"'
call WinSxS_HasAssembly
pop $R0
${If} $R0 == 1
DetailPrint "Success"
${Else}
DetailPrint "Not find"
DetailPrint "Going to download and install it."
MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "${PRODUCT_SHORT_NAME} requires Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library. Download and install it automatically?$\n\
Press YES to allow.$\n\
Press NO to continue without runtime.$\n\
Press CANCEL to exit from installer." IDYES DownloadAndInstallRuntime IDNO ContinueNoRuntime
DetailPrint "${PRODUCT_FULL_NAME} installation cancelled."
Abort
DownloadAndInstallRuntime:
DetailPrint "Downloading Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library..."
inetc::get /CAPTION "${PRODUCT_SHORT_NAME}" /QUESTION "" /POPUP "" /TIMEOUT=30000 "${VC_RUNTIME_URL}" "$TEMP\vcredist_${PRODUCT_ARCH}.exe" /END
Pop $0
${If} $0 == "OK"
DetailPrint "Successfully downloaded."
DetailPrint "Installing Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library..."
IfErrors ClearErrorFlag
ClearErrorFlag:
ExecWait "$TEMP\vcredist_${PRODUCT_ARCH}.exe"
IfErrors RuntimeInstallFailed
DetailPrint "Successfully installed."
${Else}
RuntimeInstallFailed:
DetailPrint "Operation failed. Installation will be continued without Visual C++ runtime."
DetailPrint "Please download and install it manually from product download page:"
DetailPrint "${VC_RUNTIME_URL}"
${EndIf}
ContinueNoRuntime:
${EndIf}
DetailPrint "Check Python ${PYTHON_VERSION} ${PRODUCT_ARCH}..."
!if ${PRODUCT_ARCH} == "x64"
${IfThen} ${RunningX64} ${|} SetRegView 64 ${|}
!endif
ReadRegStr $R0 HKLM "Software\Python\PythonCore\${PYTHON_VERSION}\InstallPath" ""
!if ${PRODUCT_ARCH} == "x64"
${IfThen} ${RunningX64} ${|} SetRegView 32 ${|}
!endif
${If} $R0 == ""
DetailPrint "Appropiate Python version was no not find in:"
DetailPrint "HKLM\Software\Python\PythonCore\${PYTHON_VERSION}\InstallPath"
DetailPrint "Going to download and install it."
MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "${PRODUCT_SHORT_NAME} requires Python ${PYTHON_VERSION}. Download and install it automatically?$\n\
Press YES to allow.$\n\
Press NO to continue without Python.$\n\
Press CANCEL to exit from installer." IDYES DownloadAndInstallPython IDNO ContinueNoPython
DetailPrint "${PRODUCT_FULL_NAME} installation cancelled."
Abort
DownloadAndInstallPython:
DetailPrint "Downloading Python..."
inetc::get /CAPTION "${PRODUCT_SHORT_NAME}" /QUESTION "" /POPUP "" /TIMEOUT=30000 "${PYTHON_URL_BASE}${PYTHON_INSTALLER}" "$TEMP\${PYTHON_INSTALLER}" /END
Pop $0
${If} $0 == "OK"
DetailPrint "Successfully downloaded."
DetailPrint "Installing Python..."
IfErrors ClearErrorFlag1
ClearErrorFlag1:
ExecWait '"msiexec" /i "$TEMP\${PYTHON_INSTALLER}"'
IfErrors PythonInstallFailed
DetailPrint "Successfully installed."
${Else}
PythonInstallFailed:
DetailPrint "Operation failed. Installation will be continued without Python."
DetailPrint "Please download and install it manually:"
DetailPrint "${PYTHON_URL_BASE}${PYTHON_INSTALLER}"
${EndIf}
ContinueNoPython:
${Else}
DetailPrint "Python ${PYTHON_VERSION} ${PRODUCT_ARCH} location: $R0"
${EndIf}
# Set Section properties
SetOverwrite on
# CURRENT USER
SetShellVarContext current
# Set Section Files and Shortcuts
SetOutPath "$INSTDIR"
# Extract files
!if ${PRODUCT_ARCH} == "x64"
File "..\x64\Release\pykd.pyd"
!else
File "..\Release\pykd.pyd"
!endif
SectionEnd
Section -FinishSection
#Store installation folder
WriteRegStr HKLM "Software\${PRODUCT_SHORT_NAME}" "${PRODUCT_ARCH}" "$INSTDIR"
SectionEnd