Files
fluxengine/extras/windows-installer.nsi
2023-06-25 16:18:03 -07:00

163 lines
5.3 KiB
NSIS

; © 2022 David Given.
; FluxEngine binaries are distributable under the terms of the GPLv2. See the
; README.md file in this distribution for the full text.
!include MUI2.nsh
Name "FluxEngine for Windows"
OutFile "${OUTFILE}"
Unicode True
InstallDir "$PROGRAMFILES\Cowlark Technologies\FluxEngine"
InstallDirRegKey HKLM "Software\Cowlark Technologies\FluxEngine" \
"InstallationDirectory"
RequestExecutionLevel admin
SetCompressor /solid lzma
;--------------------------------
!define MUI_WELCOMEPAGE_TITLE "FluxEngine for Windows"
!define MUI_WELCOMEPAGE_TEXT "FluxEngine is a flux-level floppy disk interface \
capable of reading and writing almost any floppy disk format. This package \
contains the client software, which will work on either FluxEngine or \
GreaseWeazle hardware. It also allows manipulation of flux files and disk \
images, so it's useful without any hardware.$\r$\n\
$\r$\n\
This wizard will install FluxEngine on your computer.$\r$\n\
$\r$\n\
$_CLICK"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp"
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE_NODESC
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE "Installation complete"
!define MUI_FINISHPAGE_TEXT_LARGE
!define MUI_FINISHPAGE_TEXT "FluxEngine is now ready to use.$\r$\n\
$\r$\n\
Have fun!"
Function runprogramaction
ExecShell "" "$INSTDIR\fluxengine-gui.exe"
FunctionEnd
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT "Run now"
!define MUI_FINISHPAGE_RUN_FUNCTION runprogramaction
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
; Utility functions
!define SHCNE_ASSOCCHANGED 0x08000000
!define SHCNF_IDLIST 0
Function RefreshShellIcons
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
FunctionEnd
Function un.RefreshShellIcons
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
FunctionEnd
;--------------------------------
; The stuff to install
Section "FluxEngine (required)"
SectionIn RO
SetOutPath $INSTDIR
File /oname=fluxengine.exe fluxengine-stripped.exe
File /oname=fluxengine-gui.exe fluxengine-gui-stripped.exe
File README.md
CreateDirectory $INSTDIR\dep
CreateDirectory $INSTDIR\dep\adflib
File /oname=dep\adflib\COPYING dep\adflib\COPYING
CreateDirectory $INSTDIR\dep\hfsutils
File /oname=dep\hfsutils\COPYING dep\hfsutils\COPYING
CreateDirectory $INSTDIR\dep\stb
File /oname=dep\stb\LICENSE dep\stb\LICENSE
CreateDirectory $INSTDIR\dep\fatfs
File /oname=dep\fatfs\LICENSE.txt dep\fatfs\LICENSE.txt
CreateDirectory $INSTDIR\dep\libusbp
File /oname=dep\libusbp\LICENSE.txt dep\libusbp\LICENSE.txt
CreateDirectory $INSTDIR\dep\snowhouse
File /oname=dep\snowhouse\LICENSE_1_0.txt dep\snowhouse\LICENSE_1_0.txt
CreateDirectory $INSTDIR\dep\agg
File /oname=dep\agg\README dep\agg\README
; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\NSIS_FluxEngine "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FluxEngine" "DisplayName" "FluxEngine for Windows"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FluxEngine" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FluxEngine" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FluxEngine" "NoRepair" 1
WriteUninstaller "uninstall.exe"
; Update the shell.
Call RefreshShellIcons
SectionEnd
Section "FluxEngine hardware firmware"
SetOutPath $INSTDIR
FILE /oname=fluxengine-firmware.hex "FluxEngine.cydsn\CortexM3\ARM_GCC_541\Release\FluxEngine.hex"
SectionEnd
Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\FluxEngine"
CreateShortCut "$SMPROGRAMS\FluxEngine\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
SetOutPath "$DOCUMENTS"
CreateShortCut "$SMPROGRAMS\FluxEngine\FluxEngine.lnk" "$INSTDIR\fluxengine-gui.exe" "" "$INSTDIR\fluxengine-gui.exe" 0
SectionEnd
Section "Desktop Shortcut"
SetOutPath "$DOCUMENTS"
CreateShortCut "$DESKTOP\FluxEngine.lnk" "$INSTDIR\fluxengine-gui.exe" "" "$INSTDIR\fluxengine-gui.exe" 0
SectionEnd
;--------------------------------
; Uninstaller
Section "Uninstall"
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FluxEngine"
DeleteRegKey HKLM SOFTWARE\NSIS_FluxEngine
Call un.RefreshShellIcons
; Remove files and uninstaller
Delete $INSTDIR\fluxengine.exe
Delete $INSTDIR\fluxengine-gui.exe
Delete $INSTDIR\uninstall.exe
Delete $INSTDIR\README.md
Delete $INSTDIR\fluxengine-firmware.hex
RmDir /r $INSTDIR\dep
; Remove shortcuts, if any
Delete "$SMPROGRAMS\FluxEngine\*.*"
Delete "$DESKTOP\FluxEngine.lnk"
; Remove directories used
RMDir "$SMPROGRAMS\FluxEngine"
RMDir "$INSTDIR"
SectionEnd