Skip to content

Commit

Permalink
Work on installing MSVCRT for bundled Python 3.5
Browse files Browse the repository at this point in the history
  • Loading branch information
takluyver committed Jul 31, 2015
1 parent 866be95 commit 2e0758e
Show file tree
Hide file tree
Showing 3 changed files with 171 additions and 0 deletions.
7 changes: 7 additions & 0 deletions nsist/pyapp.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@ Section "!${PRODUCT_NAME}" sec_app
"NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
"NoRepair" 1

; Check if we need to reboot
IfRebootFlag 0 noreboot
MessageBox MB_YESNO "A reboot is required to finish the installation. Do you wish to reboot now?" \
/SD IDNO IDNO noreboot
Reboot
noreboot:
SectionEnd

Section "Uninstall"
Expand Down
45 changes: 45 additions & 0 deletions nsist/pyapp_msvcrt.nsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
[% extends "pyapp.nsi" %]

[% block sections %]
!include windowsversion.nsh
!include x64.nsh

Section "-msvcrt"
${GetWindowsVersion} $R0

StrCpy $0 "--"

${If} ${RunningX64}
${If} $R0 == "8.1"
StrCpy $0 "8.1 x64 URL"
${ElseIf} $R0 == "8"
StrCpy $0 "8 x64 URL"
${ElseIf} $R0 == "7"
StrCpy $0 "7 x64 URL"
${EndIf}
${Else}
${If} $R0 == "8.1"
StrCpy $0 "8.1 x32 URL"
${ElseIf} $R0 == "8"
StrCpy $0 "8 x32 URL"
${ElseIf} $R0 == "7"
StrCpy $0 "7 x32 URL"
${EndIf}
${EndIf}

IfFileExists "$SYSDIR\ucrtbase.dll" skip_msvcrt
StrCmp $0 "--" skip_msvcrt

DetailPrint "Downloading and installing MSVCRT from $0"
NSISdl::download $0 msvcrt.msu
ExecWait 'wusa /quiet /norestart "$INSTDIR\msvcrt.msu"' $1
Delete "$INSTDIR\msvcrt.msu"

# This WUSA exit code means a reboot is needed.
${If} $1 = 0x00240005
SetRebootFlag true
${EndIf}

skip_msvcrt:
SectionEnd
[% endblock sections %]
119 changes: 119 additions & 0 deletions nsist/windowsversion.nsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
; GetWindowsVersion 4.1 (2014-10-01)
;
; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
; Update by Joost Verburg
; Update (Macro, Define, Windows 7 detection) - John T. Haller of PortableApps.com - 2008-01-07
; Update (Windows 8 detection) - Marek Mizanin (Zanir) - 2013-02-07
; Update (Windows 8.1 detection) - John T. Haller of PortableApps.com - 2014-04-04
; Update (Windows 10 TP detection) - John T. Haller of PortableApps.com - 2014-10-01
; Got from http://nsis.sourceforge.net/Get_Windows_version
;
; Usage: ${GetWindowsVersion} $R0
;
; $R0 contains: 95, 98, ME, NT x.x, 2000, XP, 2003, Vista, 7, 8, 8.1, 10.0 or '' (for unknown)

Function GetWindowsVersion

Push $R0
Push $R1

ClearErrors

ReadRegStr $R0 HKLM \
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion

IfErrors 0 lbl_winnt

; we are not NT
ReadRegStr $R0 HKLM \
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber

StrCpy $R1 $R0 1
StrCmp $R1 '4' 0 lbl_error

StrCpy $R1 $R0 3

StrCmp $R1 '4.0' lbl_win32_95
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98

lbl_win32_95:
StrCpy $R0 '95'
Goto lbl_done

lbl_win32_98:
StrCpy $R0 '98'
Goto lbl_done

lbl_win32_ME:
StrCpy $R0 'ME'
Goto lbl_done

lbl_winnt:

StrCpy $R1 $R0 1

StrCmp $R1 '3' lbl_winnt_x
StrCmp $R1 '4' lbl_winnt_x

StrCpy $R1 $R0 3

StrCmp $R1 '5.0' lbl_winnt_2000
StrCmp $R1 '5.1' lbl_winnt_XP
StrCmp $R1 '5.2' lbl_winnt_2003
StrCmp $R1 '6.0' lbl_winnt_vista
StrCmp $R1 '6.1' lbl_winnt_7
StrCmp $R1 '6.2' lbl_winnt_8
StrCmp $R1 '6.3' lbl_winnt_81
StrCmp $R1 '6.4' lbl_winnt_10 lbl_error

lbl_winnt_x:
StrCpy $R0 "NT $R0" 6
Goto lbl_done

lbl_winnt_2000:
Strcpy $R0 '2000'
Goto lbl_done

lbl_winnt_XP:
Strcpy $R0 'XP'
Goto lbl_done

lbl_winnt_2003:
Strcpy $R0 '2003'
Goto lbl_done

lbl_winnt_vista:
Strcpy $R0 'Vista'
Goto lbl_done

lbl_winnt_7:
Strcpy $R0 '7'
Goto lbl_done

lbl_winnt_8:
Strcpy $R0 '8'
Goto lbl_done

lbl_winnt_81:
Strcpy $R0 '8.1'
Goto lbl_done

lbl_winnt_10:
Strcpy $R0 '10.0'
Goto lbl_done

lbl_error:
Strcpy $R0 ''
lbl_done:

Pop $R1
Exch $R0

FunctionEnd

!macro GetWindowsVersion OUTPUT_VALUE
Call GetWindowsVersion
Pop `${OUTPUT_VALUE}`
!macroend

!define GetWindowsVersion '!insertmacro "GetWindowsVersion"'

0 comments on commit 2e0758e

Please sign in to comment.