forked from bartvdbraak/blender
d369a6aaaf
* Windows installer not working for non-admin users and multiple users * Addon scripts not installing next to user configuration * Portable install not being taken into account in all places The main problem was the windows installer was installing system scripts in AppData next to the user configuration directory, which is not shared between users. Now these are installed in ProgramFiles, and only addon scripts added by the users go to AppData. On all platforms, addon scripts were sometimes getting installed between system scripts, because the scripts folder in the executable directory was given precedence over the user configuration folder, that is no longer done now. So addons now behave like user configuration, they are preserved even if you download a newer build of the same blender version. If you have an installation of 2.57 on windows, the addon install location will not change until we do the version bump to 2.58, to avoid conflicts with the existing the installed 2.57 version. The old behavior of giving precedence to the local folder was done to support portable install, where all configuration is written to the local folder. This is now implemented differently: if and only if a "config" folder exists in the local folder, portable install will be assumed, and files will only be written to that local folder.
233 lines
8.1 KiB
Plaintext
233 lines
8.1 KiB
Plaintext
;
|
|
; $Id$
|
|
;
|
|
; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)
|
|
;
|
|
|
|
SetCompressor /SOLID lzma
|
|
|
|
Name "Blender [VERSION]"
|
|
|
|
RequestExecutionLevel admin
|
|
|
|
!include "MUI.nsh"
|
|
!include "WinVer.nsh"
|
|
!include "FileFunc.nsh"
|
|
!include "WordFunc.nsh"
|
|
!include "nsDialogs.nsh"
|
|
!include "x64.nsh"
|
|
|
|
!define MUI_ABORTWARNING
|
|
|
|
!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Blender. It is recommended that you close all other applications before starting Setup."
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "[RELDIR]\01.installer.bmp"
|
|
!define MUI_HEADERIMAGE
|
|
!define MUI_HEADERIMAGE_BITMAP "[RELDIR]\00.header.bmp"
|
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
|
!define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"
|
|
!define MUI_CHECKBITMAP "[RELDIR]\00.checked.bmp"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "[RELDIR]\01.installer.bmp"
|
|
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
!insertmacro MUI_PAGE_LICENSE "[DISTDIR]\Copyright.txt"
|
|
!insertmacro MUI_PAGE_COMPONENTS
|
|
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
!insertmacro MUI_UNPAGE_WELCOME
|
|
UninstPage custom un.OptionalRemoveConfig un.OptionalRemoveConfigOnLeave
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
!insertmacro Locate
|
|
!insertmacro VersionCompare
|
|
|
|
|
|
Icon "[RELDIR]\00.installer.ico"
|
|
UninstallIcon "[RELDIR]\00.installer.ico"
|
|
|
|
;--------------------------------
|
|
;Languages
|
|
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
;--------------------------------
|
|
;Language Strings
|
|
|
|
;Description
|
|
LangString DESC_InstallFiles ${LANG_ENGLISH} "Copy all required files to the application folder."
|
|
LangString DESC_StartMenu ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"
|
|
LangString DESC_DesktopShortcut ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."
|
|
LangString DESC_BlendRegister ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."
|
|
;--------------------------------
|
|
;Data
|
|
|
|
Caption "Blender [VERSION] Installer"
|
|
OutFile "[DISTDIR]\..\blender-[VERSION]-windows[BITNESS].exe"
|
|
InstallDir $INSTDIR ; $INSTDIR is set inside .onInit
|
|
BrandingText "Blender Foundation | http://www.blender.org"
|
|
ComponentText "This will install Blender [VERSION] on your computer."
|
|
|
|
DirText "Use the field below to specify the folder where you want Blender to be copied to. To specify a different folder, type a new name or use the Browse button to select an existing folder."
|
|
|
|
SilentUnInstall normal
|
|
|
|
Var SHORTVERSION ; This is blender_version_decimal() from path_util.c
|
|
Var BLENDERCONFIG
|
|
Var REMOVECONFIG
|
|
|
|
; Custom controls
|
|
Var HWND
|
|
|
|
Var HWND_KEEPCONFIG
|
|
Var HWND_REMOVECONFIG
|
|
|
|
Function .onInit
|
|
ClearErrors
|
|
StrCpy $SHORTVERSION "[SHORTVERSION]"
|
|
|
|
${If} ${RunningX64}
|
|
${If} "[BITNESS]" == "32"
|
|
${OrIf} "[BITNESS]" == "-mingw"
|
|
StrCpy $INSTDIR "$PROGRAMFILES32\Blender Foundation\Blender" ; Can't use InstallDir inside Section
|
|
${ElseIf} "[BITNESS]" == "64"
|
|
StrCpy $INSTDIR "$PROGRAMFILES64\Blender Foundation\Blender"
|
|
${EndIf}
|
|
${Else}
|
|
StrCpy $INSTDIR "$PROGRAMFILES\Blender Foundation\Blender"
|
|
${EndIf}
|
|
FunctionEnd
|
|
|
|
Function un.onInit
|
|
SetShellVarContext current
|
|
StrCpy $BLENDERCONFIG "$APPDATA\Blender Foundation\Blender"
|
|
SetShellVarContext all
|
|
FunctionEnd
|
|
|
|
Function un.OptionalRemoveConfig
|
|
nsDialogs::Create /NOUNLOAD 1018
|
|
Pop $HWND
|
|
|
|
${If} $HWND == error
|
|
Abort
|
|
${EndIf}
|
|
|
|
${NSD_CreateRadioButton} 0 50 100% 12u "Keep configuration files, autosaved .blend files and installed addons (recommended)"
|
|
Pop $HWND_KEEPCONFIG
|
|
${NSD_CreateRadioButton} 0 80 100% 12u "Remove all files, including configuration files, autosaved .blend files and installed addons"
|
|
Pop $HWND_REMOVECONFIG
|
|
|
|
SendMessage $HWND_KEEPCONFIG ${BM_SETCHECK} 1 0
|
|
|
|
nsDialogs::Show
|
|
|
|
FunctionEnd
|
|
|
|
Function un.OptionalRemoveConfigOnLeave
|
|
${NSD_GetState} $HWND_REMOVECONFIG $R0
|
|
${If} $R0 == "1"
|
|
StrCpy $REMOVECONFIG "1"
|
|
${Else}
|
|
StrCpy $REMOVECONFIG "0"
|
|
${EndIf}
|
|
FunctionEnd
|
|
|
|
|
|
Section "Blender [VERSION] (required)" InstallFiles
|
|
SectionIn RO
|
|
|
|
; Set output path to the installation directory.
|
|
SetOutPath $INSTDIR
|
|
; The contents of Blender installation root dir
|
|
[ROOTDIRCONTS]
|
|
|
|
; All datafiles (python, scripts, datafiles)
|
|
[DODATAFILES]
|
|
|
|
SetOutPath $INSTDIR
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
; Write the installation path into the registry
|
|
WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "Install_Dir" "$INSTDIR"
|
|
WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "ShortVersion" "[SHORTVERSION]"
|
|
; Write the uninstall keys for Windows
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "Publisher" "Blender Foundation"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "URLInfoAbout" "http://www.blender.org/"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayVersion" "[VERSION]"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayIcon" "$INSTDIR\blender.exe"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "NoModify" 1
|
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "NoRepair " 1
|
|
WriteUninstaller "uninstall.exe"
|
|
|
|
SectionEnd
|
|
|
|
Section "Add Start Menu Shortcuts" StartMenu
|
|
SetShellVarContext all
|
|
CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
|
|
CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
|
|
CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
|
|
CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\readme.html" "" "" 0
|
|
CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
|
|
CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
|
|
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' ; refresh icons
|
|
SectionEnd
|
|
|
|
Section "Add Desktop Shortcut" DesktopShortcut
|
|
CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
|
|
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' ; refresh icons
|
|
SectionEnd
|
|
|
|
Section "Open .blend files with Blender" BlendRegister
|
|
ExecWait '"$INSTDIR\blender.exe" -r'
|
|
SectionEnd
|
|
|
|
UninstallText "This will uninstall Blender [VERSION], and all installed files. Hit 'Uninstall' to continue."
|
|
|
|
Section "Uninstall"
|
|
; Remove registry keys
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
|
|
ReadRegStr $SHORTVERSION HKLM "SOFTWARE\BlenderFoundation" "ShortVersion"
|
|
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
|
|
DeleteRegKey HKLM "SOFTWARE\BlenderFoundation"
|
|
DeleteRegKey HKCR ".blend"
|
|
DeleteRegKey HKCR "blendfile"
|
|
DeleteRegKey HKCR "CLSID\{D45F043D-F17F-4e8a-8435-70971D9FA46D}"
|
|
SetShellVarContext all
|
|
|
|
; Remove files
|
|
[DELROOTDIRCONTS]
|
|
|
|
Delete "$INSTDIR\uninstall.exe"
|
|
|
|
${If} $REMOVECONFIG == "1"
|
|
RMDir /r "$BLENDERCONFIG\$SHORTVERSION"
|
|
${Endif}
|
|
|
|
; Remove shortcuts
|
|
Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
|
|
Delete "$DESKTOP\Blender.lnk"
|
|
; Remove all link related directories and files
|
|
RMDir /r "$SMPROGRAMS\Blender Foundation"
|
|
; Clear out installation dir
|
|
RMDir /r "$INSTDIR"
|
|
|
|
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' ; Refresh icons
|
|
SectionEnd
|
|
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${InstallFiles} $(DESC_InstallFiles)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} $(DESC_StartMenu)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${DesktopShortcut} $(DESC_DesktopShortcut)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${BlendRegister} $(DESC_BlendRegister)
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
|