diff options
| author | Mark Young <marky@lunarg.com> | 2016-01-15 15:09:39 -0700 |
|---|---|---|
| committer | Mark Young <marky@lunarg.com> | 2016-01-25 16:04:01 -0700 |
| commit | b0a7e748586f7620a5af13ca9ac0b4a956687be5 (patch) | |
| tree | cd94058d6c81d142f05b0578ac46e11f8660e961 | |
| parent | 6f9128c15f30a97dd45e8d17dbabf2827c2ef71e (diff) | |
| download | usermoji-b0a7e748586f7620a5af13ca9ac0b4a956687be5.tar.xz | |
Installer: Changes for 32-bit installer
Installer/scripts should now support 32-bit OS.
| -rw-r--r-- | windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1 | 24 | ||||
| -rw-r--r-- | windowsRuntimeInstaller/InstallerRT.nsi | 244 | ||||
| -rw-r--r-- | windowsRuntimeInstaller/vcredist_x86.exe | bin | 0 -> 6503984 bytes |
3 files changed, 172 insertions, 96 deletions
diff --git a/windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1 b/windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1 index d273c2ab..13a7b4cd 100644 --- a/windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1 +++ b/windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1 @@ -27,13 +27,20 @@ # to vulkan-<majorabi>.dll
# - Copy the most recent version of vulkaninfo-<abimajor>-*.exe in
# C:\Windows\System32 to vulkaninfo.exe
+# - The same thing is done for those files in C:\Windows\SysWOW64 on a 64-bit
+# target.
# - Set the layer registry entries to point to the layer json files
# in the Vulkan SDK associated with the most recent vulkan*dll.
#
-# This script takes one parameter - a single number specifying the major abi version.
+# This script takes two parameters:
+# $majorabi : a single string number specifying the major abi version.
+# $ossize : an integer indicating if the target is a 64 (64) or 32 (32) bit OS.
#
-Param([string]$majorabi)
+Param(
+ [string]$majorabi,
+ [int]$ossize
+)
$vulkandll = "vulkan-"+$majorabi+".dll"
@@ -53,7 +60,8 @@ $vulkandll = "vulkan-"+$majorabi+".dll" # We first create an array, with one array element for each vulkan-*dll in
-# C:\Windows\System32, with each element containing:
+# C:\Windows\System32 (and C:\Windows\SysWOW64 on 64-bit systems), with each element
+# containing:
# <major>=<minor>=<patch>=<buildno>=<prerelease>=<prebuildno>=
# filename
# @<major>@<minor>@<patch>@<buildno>@<prerelease>@<prebuildno>@
@@ -172,8 +180,14 @@ function UpdateVulkanSysFolder($dir) Pop-Location
}
-# Update the SYSWOW64 and SYSTEM32 Vulkan items
-UpdateVulkanSysFolder c:\WINDOWS\SYSWOW64
+# We only care about SYSWOW64 if we're targeting a 64-bit OS
+if ($ossize -eq 64)
+{
+ # Update the SYSWOW64 Vulkan DLLS/EXEs
+ UpdateVulkanSysFolder c:\WINDOWS\SYSWOW64
+}
+
+# Update the SYSTEM32 Vulkan DLLS/EXEs
UpdateVulkanSysFolder c:\WINDOWS\SYSTEM32
# Create an array of vulkan sdk install dirs
diff --git a/windowsRuntimeInstaller/InstallerRT.nsi b/windowsRuntimeInstaller/InstallerRT.nsi index 2d723ce6..7c842cf8 100644 --- a/windowsRuntimeInstaller/InstallerRT.nsi +++ b/windowsRuntimeInstaller/InstallerRT.nsi @@ -57,7 +57,7 @@ WindowIcon off OutFile "VulkanRT-${PRODUCTVERSION}-Installer.exe" # Define default installation directory -InstallDir "C:\Program Files (x86)\${PRODUCTNAME}\${PRODUCTVERSION}" +InstallDir "$PROGRAMFILES\${PRODUCTNAME}\${PRODUCTVERSION}" # Variable that holds version string used in file names Var FileVersion @@ -167,12 +167,11 @@ Var FileVersion Function .onInit - # Make sure we are on Win64. - ${IfNot} ${RunningX64} - MessageBox MB_OK "The Vulkan Run Time Libraries must be installed on a Windows 64-bit system." - abort - ${Endif} - + # + # Nothing to do now, we used to fail on a 32-bit system here. + # Remove if not needed in the future. + # + FunctionEnd # Need admin to write to C:\Windows\System32 and install dir @@ -199,10 +198,16 @@ Section ${DisableX64FSRedirection} SetRegView 64 - # Set up version number for file names - ${StrRep} $0 ${VERSION_BUILDNO} "." "-" - StrCpy $FileVersion ${VERSION_ABI_MAJOR}-${VERSION_API_MAJOR}-${VERSION_MINOR}-${VERSION_PATCH}-$0 + ${Endif} + + # Set up version number for file names + ${StrRep} $0 ${VERSION_BUILDNO} "." "-" + StrCpy $FileVersion ${VERSION_ABI_MAJOR}-${VERSION_API_MAJOR}-${VERSION_MINOR}-${VERSION_PATCH}-$0 + + # If running on a 64-bit OS machine + ${If} ${RunningX64} + # 32-bit DLLs/EXEs destined for SysWOW64 ########################################## SetOutPath $WINDIR\SysWow64 @@ -231,46 +236,83 @@ Section # Run the ConfigLayersAndVulkanDLL.ps1 script to copy the most recent version of # vulkan-<abimajor>-*.dll to vulkan-<abimajor>.dll, and to set up layer registry # entries to use layers from the corresponding SDK - nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File ConfigLayersAndVulkanDLL.ps1 ${VERSION_ABI_MAJOR}' + nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File ConfigLayersAndVulkanDLL.ps1 ${VERSION_ABI_MAJOR} 64' # We are done using ConfigLayersAndVulkanDLL.ps1, delete it. It will be re-installed # by the uninstaller when it needs to be run again during uninstall. Delete ConfigLayersAndVulkanDLL.ps1 - # Reference count the number of times we have been installed. - # The reference count is stored in the regisry value IC - ReadRegDword $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" - IntOp $1 $1 + 1 - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" $1 + # Else, running on a 32-bit OS machine + ${Else} + + # 32-bit DLLs/EXEs destined for SysWOW64 + ########################################## + SetOutPath $WINDIR\System32 + File /oname=vulkan-$FileVersion.dll ..\build32\loader\Release\vulkan-${VERSION_ABI_MAJOR}.dll - # Create the uninstaller - WriteUninstaller "$INSTDIR\Uninstall${PRODUCTNAME}.exe" + # vulkaninfo.exe + File /oname=vulkaninfo-$FileVersion.exe ..\build32\demos\Release\vulkaninfo.exe + SetOutPath "$INSTDIR" + File ..\build32\demos\Release\vulkaninfo.exe + SetShellVarContext all + CreateDirectory "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}" + CreateDirectory "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos" + CreateShortCut "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos\vulkaninfo.lnk" "$INSTDIR\vulkaninfo.exe" - # Modify registry for Programs and Features - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayName" "Vulkan Run Time Libraries ${PRODUCTVERSION}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "UninstallString" "$INSTDIR\Uninstall${PRODUCTNAME}.exe" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "Publisher" "LunarG, Inc." - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayVersion" "${PRODUCTVERSION}" - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionABIMajor" ${VERSION_ABI_MAJOR} - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionAPIMajor" ${VERSION_API_MAJOR} - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionMinor" ${VERSION_MINOR} - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionMinor" ${VERSION_PATCH}.${VERSION_BUILDNO} - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "EstimatedSize" ${ESTIMATEDSIZE} - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayIcon" "$\"$INSTDIR\${ICOFILE}$\"" - - # Possibly install MSVC 2013 redistributables - ReadRegDword $1 HKLM "SOFTWARE\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum" "Install" - IntCmp $1 1 RedistributablesInstalled InstallRedistributables InstallRedistributables - InstallRedistributables: - SetOutPath "$TEMP" + SetOutPath "$INSTDIR" + File ${ICOFILE} + File LICENSE.rtf + File ConfigLayersAndVulkanDLL.ps1 + + # Run the ConfigLayersAndVulkanDLL.ps1 script to copy the most recent version of + # vulkan-<abimajor>-*.dll to vulkan-<abimajor>.dll, and to set up layer registry + # entries to use layers from the corresponding SDK + nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File ConfigLayersAndVulkanDLL.ps1 ${VERSION_ABI_MAJOR} 32' + + # We are done using ConfigLayersAndVulkanDLL.ps1, delete it. It will be re-installed + # by the uninstaller when it needs to be run again during uninstall. + Delete ConfigLayersAndVulkanDLL.ps1 + + ${Endif} + + # Reference count the number of times we have been installed. + # The reference count is stored in the regisry value IC + ReadRegDword $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" + IntOp $1 $1 + 1 + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" $1 + + # Create the uninstaller + WriteUninstaller "$INSTDIR\Uninstall${PRODUCTNAME}.exe" + + # Modify registry for Programs and Features + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayName" "Vulkan Run Time Libraries ${PRODUCTVERSION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "UninstallString" "$INSTDIR\Uninstall${PRODUCTNAME}.exe" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "Publisher" "LunarG, Inc." + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayVersion" "${PRODUCTVERSION}" + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionABIMajor" ${VERSION_ABI_MAJOR} + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionAPIMajor" ${VERSION_API_MAJOR} + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionMinor" ${VERSION_MINOR} + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "VersionMinor" ${VERSION_PATCH}.${VERSION_BUILDNO} + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "EstimatedSize" ${ESTIMATEDSIZE} + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "DisplayIcon" "$\"$INSTDIR\${ICOFILE}$\"" + + # Possibly install MSVC 2013 redistributables + ReadRegDword $1 HKLM "SOFTWARE\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum" "Install" + IntCmp $1 1 RedistributablesInstalled InstallRedistributables InstallRedistributables + InstallRedistributables: + SetOutPath "$TEMP" + # If running on a 64-bit OS machine, we need to install the 64-bit Visual Studio re-distributable + ${If} ${RunningX64} + File vcredist_x64.exe ExecWait '"$TEMP\vcredist_x64.exe" /passive /norestart' - RedistributablesInstalled: - # Else, running on a 32-bit OS machine - ${Else} - - ${Endif} + # Otherwise, we're running on a 32-bit OS machine, we need to install the 32-bit Visual Studio re-distributable + ${Else} + File vcredist_x86.exe + ExecWait '"$TEMP\vcredist_x86.exe" /passive /norestart' + ${Endif} + RedistributablesInstalled: SectionEnd @@ -282,25 +324,30 @@ Section "uninstall" ${DisableX64FSRedirection} SetRegView 64 + + ${Endif} - SetOutPath "$INSTDIR" + SetOutPath "$INSTDIR" - # Set up version number for file names - ${StrRep} $0 ${VERSION_BUILDNO} "." "-" - StrCpy $FileVersion ${VERSION_ABI_MAJOR}-${VERSION_API_MAJOR}-${VERSION_MINOR}-${VERSION_PATCH}-$0 + # Set up version number for file names + ${StrRep} $0 ${VERSION_BUILDNO} "." "-" + StrCpy $FileVersion ${VERSION_ABI_MAJOR}-${VERSION_API_MAJOR}-${VERSION_MINOR}-${VERSION_PATCH}-$0 - # Decrement the number of times we have been installed. - ReadRegDword $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" - IntOp $1 $1 - 1 - WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" $1 + # Decrement the number of times we have been installed. + ReadRegDword $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" + IntOp $1 $1 - 1 + WriteRegDword HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" "IC" $1 - # Ref count is in $1. If it is zero, uninstall. - ${If} $1 <= 0 + # Ref count is in $1. If it is zero, uninstall. + ${If} $1 <= 0 - # Install the ConfigLayersAndVulkanDLL.ps1 so we can run it. - # It will be deleted later when we remove the install directory. - File ConfigLayersAndVulkanDLL.ps1 + # Install the ConfigLayersAndVulkanDLL.ps1 so we can run it. + # It will be deleted later when we remove the install directory. + File ConfigLayersAndVulkanDLL.ps1 + # If running on a 64-bit OS machine + ${If} ${RunningX64} + # Delete vulkaninfo.exe in C:\Windows\System32 and C:\Windows\SysWOW64 Delete /REBOOTOK $WINDIR\SysWow64\vulkaninfo.exe Delete /REBOOTOK "$WINDIR\SysWow64\vulkaninfo-$FileVersion.exe" @@ -317,46 +364,61 @@ Section "uninstall" # Copy the most recent version of vulkan-<abimajor>-*.dll to vulkan-<abimajor>.dll # Copy the most recent version of vulkaninfo-<abimajor>-*.exe to vulkaninfo.exe # Set up layer registry entries to use layers from the corresponding SDK - nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File "$INSTDIR\ConfigLayersAndVulkanDLL.ps1" ${VERSION_ABI_MAJOR}' - - # Delete vulkaninfo from start menu. - # Delete vulkan start menu if the vulkan start menu is empty - SetShellVarContext all - Delete "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos\vulkaninfo.lnk" - StrCpy $0 "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos" - Call un.DeleteDirIfEmpty - StrCpy $0 "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}" - Call un.DeleteDirIfEmpty - - # Modify registry for Programs and Features - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" - - # Remove files in install dir - Delete /REBOOTOK "$INSTDIR\LICENSE.rtf" - Delete /REBOOTOK "$INSTDIR\UninstallVulkanRT.exe" - Delete /REBOOTOK "$INSTDIR\Vulkan.ico" - Delete /REBOOTOK "$INSTDIR\ConfigLayersAndVulkanDLL.ps1" - Delete /REBOOTOK "$INSTDIR\vulkaninfo.exe" - - # Need to do a SetOutPath to something outside of INSTDIR, - # or the uninstall will think INSTDIR is busy - SetOutPath "$TEMP" - - # Remove install directories - Rmdir /REBOOTOK "$INSTDIR" - StrCpy $0 "C:\Program Files (x86)\${PRODUCTNAME}" - Call un.DeleteDirIfEmpty - - # If any of the remove commands failed, request a reboot - IfRebootFlag 0 noreboot - MessageBox MB_YESNO "A reboot is required to finish the uninstall. Do you wish to reboot now?" IDNO noreboot - Reboot - noreboot: + nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File "$INSTDIR\ConfigLayersAndVulkanDLL.ps1" ${VERSION_ABI_MAJOR} 64' + + # Else, running on a 32-bit OS machine + ${Else} + + # Delete vulkaninfo.exe in C:\Windows\System32 + Delete /REBOOTOK $WINDIR\System32\vulkaninfo.exe + Delete /REBOOTOK "$WINDIR\System32\vulkaninfo-$FileVersion.exe" + + # Delete vullkan dll files: vulkan-<majorabi>.dll and vulkan-<majorabi>-<major>-<minor>-<patch>-<buildno>.dll + Delete /REBOOTOK $WINDIR\System32\vulkan-${VERSION_ABI_MAJOR}.dll + Delete /REBOOTOK $WINDIR\System32\vulkan-$FileVersion.dll + + # Run the ConfigLayersAndVulkanDLL.ps1 script to: + # Copy the most recent version of vulkan-<abimajor>-*.dll to vulkan-<abimajor>.dll + # Copy the most recent version of vulkaninfo-<abimajor>-*.exe to vulkaninfo.exe + # Set up layer registry entries to use layers from the corresponding SDK + nsExec::ExecToStack 'powershell -NoLogo -NonInteractive -WindowStyle Hidden -inputformat none -ExecutionPolicy RemoteSigned -File "$INSTDIR\ConfigLayersAndVulkanDLL.ps1" ${VERSION_ABI_MAJOR} 32' + ${EndIf} + + # Delete vulkaninfo from start menu. + # Delete vulkan start menu if the vulkan start menu is empty + SetShellVarContext all + Delete "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos\vulkaninfo.lnk" + StrCpy $0 "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}\Demos" + Call un.DeleteDirIfEmpty + StrCpy $0 "$SMPROGRAMS\Vulkan ${PRODUCTVERSION}" + Call un.DeleteDirIfEmpty - # Else, running on a 32-bit OS machine - ${Else} - + # Modify registry for Programs and Features + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}${PRODUCTVERSION}" + + # Remove files in install dir + Delete /REBOOTOK "$INSTDIR\LICENSE.rtf" + Delete /REBOOTOK "$INSTDIR\UninstallVulkanRT.exe" + Delete /REBOOTOK "$INSTDIR\Vulkan.ico" + Delete /REBOOTOK "$INSTDIR\ConfigLayersAndVulkanDLL.ps1" + Delete /REBOOTOK "$INSTDIR\vulkaninfo.exe" + + # Need to do a SetOutPath to something outside of INSTDIR, + # or the uninstall will think INSTDIR is busy + SetOutPath "$TEMP" + + # Remove install directories + Rmdir /REBOOTOK "$INSTDIR" + StrCpy $0 "$PROGRAMFILES\${PRODUCTNAME}" + Call un.DeleteDirIfEmpty + + # If any of the remove commands failed, request a reboot + IfRebootFlag 0 noreboot + MessageBox MB_YESNO "A reboot is required to finish the uninstall. Do you wish to reboot now?" IDNO noreboot + Reboot + noreboot: + ${Endif} SectionEnd diff --git a/windowsRuntimeInstaller/vcredist_x86.exe b/windowsRuntimeInstaller/vcredist_x86.exe Binary files differnew file mode 100644 index 00000000..b7955781 --- /dev/null +++ b/windowsRuntimeInstaller/vcredist_x86.exe |
