فهرست منبع

Work on installing MSVCRT for bundled Python 3.5

Thomas Kluyver 9 سال پیش
والد
کامیت
2e0758e00f
3فایلهای تغییر یافته به همراه171 افزوده شده و 0 حذف شده
  1. 7 0
      nsist/pyapp.nsi
  2. 45 0
      nsist/pyapp_msvcrt.nsi
  3. 119 0
      nsist/windowsversion.nsh

+ 7 - 0
nsist/pyapp.nsi

@@ -98,6 +98,13 @@ Section "!${PRODUCT_NAME}" sec_app
                    "NoModify" 1
                    "NoModify" 1
   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
                    "NoRepair" 1
                    "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
 SectionEnd
 
 
 Section "Uninstall"
 Section "Uninstall"

+ 45 - 0
nsist/pyapp_msvcrt.nsi

@@ -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 - 0
nsist/windowsversion.nsh

@@ -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"'