The Bitcoin Core NSIS script runs with elevated privileges. Unfortunately, this means that it launches Bitcoin Core itself with elevated privileges when the user chooses to launch Bitcoin Core at the end of the installation procedure. This commit works around the issue by having explorer.exe launch Bitcoin Core. Seems to be a similar approach to what http://nsis.sourceforge.net/ShellExecAsUser_plug-in does, but without a plugin. h/t to "UK" at https://mdb-blog.blogspot.se/2013/01/nsis-lunch-program-as-user-from-uac.html?showComment=1410158039989#c2463780017054126736 for the sample code. Fixes #7990.
178 lines
6.9 KiB
Text
178 lines
6.9 KiB
Text
Name "@PACKAGE_NAME@ (@WINDOWS_BITS@-bit)"
|
|
|
|
RequestExecutionLevel highest
|
|
SetCompressor /SOLID lzma
|
|
|
|
# General Symbol Definitions
|
|
!define REGKEY "SOFTWARE\$(^Name)"
|
|
!define VERSION @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@
|
|
!define COMPANY "@PACKAGE_NAME@ project"
|
|
!define URL @PACKAGE_URL@
|
|
|
|
# MUI Symbol Definitions
|
|
!define MUI_ICON "@abs_top_srcdir@/share/pixmaps/bitcoin.ico"
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp"
|
|
!define MUI_HEADERIMAGE
|
|
!define MUI_HEADERIMAGE_RIGHT
|
|
!define MUI_HEADERIMAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-header.bmp"
|
|
!define MUI_FINISHPAGE_NOAUTOCLOSE
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY}
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
|
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "@PACKAGE_NAME@"
|
|
!define MUI_FINISHPAGE_RUN "$WINDIR\explorer.exe"
|
|
!define MUI_FINISHPAGE_RUN_PARAMETERS $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
|
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp"
|
|
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
|
|
|
|
# Included files
|
|
!include Sections.nsh
|
|
!include MUI2.nsh
|
|
!if "@WINDOWS_BITS@" == "64"
|
|
!include x64.nsh
|
|
!endif
|
|
|
|
# Variables
|
|
Var StartMenuGroup
|
|
|
|
# Installer pages
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!insertmacro MUI_PAGE_FINISH
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
# Installer languages
|
|
!insertmacro MUI_LANGUAGE English
|
|
|
|
# Installer attributes
|
|
OutFile @abs_top_srcdir@/@PACKAGE_TARNAME@-${VERSION}-win@WINDOWS_BITS@-setup.exe
|
|
!if "@WINDOWS_BITS@" == "64"
|
|
InstallDir $PROGRAMFILES64\Bitcoin
|
|
!else
|
|
InstallDir $PROGRAMFILES\Bitcoin
|
|
!endif
|
|
CRCCheck on
|
|
XPStyle on
|
|
BrandingText " "
|
|
ShowInstDetails show
|
|
VIProductVersion ${VERSION}.@CLIENT_VERSION_BUILD@
|
|
VIAddVersionKey ProductName "@PACKAGE_NAME@"
|
|
VIAddVersionKey ProductVersion "${VERSION}"
|
|
VIAddVersionKey CompanyName "${COMPANY}"
|
|
VIAddVersionKey CompanyWebsite "${URL}"
|
|
VIAddVersionKey FileVersion "${VERSION}"
|
|
VIAddVersionKey FileDescription ""
|
|
VIAddVersionKey LegalCopyright ""
|
|
InstallDirRegKey HKCU "${REGKEY}" Path
|
|
ShowUninstDetails show
|
|
|
|
# Installer sections
|
|
Section -Main SEC0000
|
|
SetOutPath $INSTDIR
|
|
SetOverwrite on
|
|
File @abs_top_srcdir@/release/@BITCOIN_GUI_NAME@@EXEEXT@
|
|
File /oname=COPYING.txt @abs_top_srcdir@/COPYING
|
|
File /oname=readme.txt @abs_top_srcdir@/doc/README_windows.txt
|
|
SetOutPath $INSTDIR\daemon
|
|
File @abs_top_srcdir@/release/@BITCOIN_DAEMON_NAME@@EXEEXT@
|
|
File @abs_top_srcdir@/release/@BITCOIN_CLI_NAME@@EXEEXT@
|
|
SetOutPath $INSTDIR\doc
|
|
File /r @abs_top_srcdir@/doc\*.*
|
|
SetOutPath $INSTDIR
|
|
WriteRegStr HKCU "${REGKEY}\Components" Main 1
|
|
SectionEnd
|
|
|
|
Section -post SEC0001
|
|
WriteRegStr HKCU "${REGKEY}" Path $INSTDIR
|
|
SetOutPath $INSTDIR
|
|
WriteUninstaller $INSTDIR\uninstall.exe
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
CreateDirectory $SMPROGRAMS\$StartMenuGroup
|
|
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
|
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, @WINDOWS_BITS@-bit).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1
|
|
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
|
|
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
|
|
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
|
|
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
|
|
WriteRegStr HKCR "@PACKAGE_TARNAME@" "URL Protocol" ""
|
|
WriteRegStr HKCR "@PACKAGE_TARNAME@" "" "URL:Bitcoin"
|
|
WriteRegStr HKCR "@PACKAGE_TARNAME@\DefaultIcon" "" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
|
WriteRegStr HKCR "@PACKAGE_TARNAME@\shell\open\command" "" '"$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "%1"'
|
|
SectionEnd
|
|
|
|
# Macro for selecting uninstaller sections
|
|
!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID
|
|
Push $R0
|
|
ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}"
|
|
StrCmp $R0 1 0 next${UNSECTION_ID}
|
|
!insertmacro SelectSection "${UNSECTION_ID}"
|
|
GoTo done${UNSECTION_ID}
|
|
next${UNSECTION_ID}:
|
|
!insertmacro UnselectSection "${UNSECTION_ID}"
|
|
done${UNSECTION_ID}:
|
|
Pop $R0
|
|
!macroend
|
|
|
|
# Uninstaller sections
|
|
Section /o -un.Main UNSEC0000
|
|
Delete /REBOOTOK $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
|
Delete /REBOOTOK $INSTDIR\COPYING.txt
|
|
Delete /REBOOTOK $INSTDIR\readme.txt
|
|
RMDir /r /REBOOTOK $INSTDIR\daemon
|
|
RMDir /r /REBOOTOK $INSTDIR\doc
|
|
DeleteRegValue HKCU "${REGKEY}\Components" Main
|
|
SectionEnd
|
|
|
|
Section -un.post UNSEC0001
|
|
DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
|
|
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
|
|
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
|
|
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, @WINDOWS_BITS@-bit).lnk"
|
|
Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk"
|
|
Delete /REBOOTOK $INSTDIR\uninstall.exe
|
|
Delete /REBOOTOK $INSTDIR\debug.log
|
|
Delete /REBOOTOK $INSTDIR\db.log
|
|
DeleteRegValue HKCU "${REGKEY}" StartMenuGroup
|
|
DeleteRegValue HKCU "${REGKEY}" Path
|
|
DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components"
|
|
DeleteRegKey /IfEmpty HKCU "${REGKEY}"
|
|
DeleteRegKey HKCR "@PACKAGE_TARNAME@"
|
|
RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
|
|
RmDir /REBOOTOK $INSTDIR
|
|
Push $R0
|
|
StrCpy $R0 $StartMenuGroup 1
|
|
StrCmp $R0 ">" no_smgroup
|
|
no_smgroup:
|
|
Pop $R0
|
|
SectionEnd
|
|
|
|
# Installer functions
|
|
Function .onInit
|
|
InitPluginsDir
|
|
!if "@WINDOWS_BITS@" == "64"
|
|
${If} ${RunningX64}
|
|
; disable registry redirection (enable access to 64-bit portion of registry)
|
|
SetRegView 64
|
|
${Else}
|
|
MessageBox MB_OK|MB_ICONSTOP "Cannot install 64-bit version on a 32-bit system."
|
|
Abort
|
|
${EndIf}
|
|
!endif
|
|
FunctionEnd
|
|
|
|
# Uninstaller functions
|
|
Function un.onInit
|
|
ReadRegStr $INSTDIR HKCU "${REGKEY}" Path
|
|
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup
|
|
!insertmacro SELECT_UNSECTION Main ${UNSEC0000}
|
|
FunctionEnd
|