Files
kanhole/packaging/windows/kanholec.nsi
T
kannn 2cd3052da1
golangci-lint / lint (push) Failing after 1m5s
rebrand: frp -> kanhole (kanhole server, kanholec client)
2026-05-29 09:05:34 +00:00

149 lines
4.7 KiB
NSIS

; kanholec Windows Installer (NSIS)
; Build: makensis kanholec.nsi
; Requires: NSIS 3.x (https://nsis.sourceforge.io)
!define PRODUCT_NAME "kanholec"
!define PRODUCT_VERSION "0.62.0"
!define PRODUCT_PUBLISHER "kanhole Contributors"
!define PRODUCT_WEB_SITE "https://github.com/kanhole/kanhole"
!define PRODUCT_DIR "$PROGRAMFILES64\${PRODUCT_NAME}"
!define PRODUCT_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "..\..\bin\kanholec-${PRODUCT_VERSION}-setup.exe"
InstallDir "${PRODUCT_DIR}"
InstallDirRegKey HKLM "${PRODUCT_UNINSTALL_KEY}" "InstallLocation"
RequestExecutionLevel admin
SetCompressor lzma
; Pages (setup wizard)
Page license
Page components
Page directory
Page instfiles
Page custom setFinishPage
; Uninstaller pages
UninstPage uninstConfirm
UninstPage instfiles
; License data
LicenseData "..\..\packaging\windows\license.txt"
; Languages
!insertmacro MUI_LANGUAGE "English"
; Include modern UI
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "WinMessages.nsh"
!include "LogicLib.nsh"
Var FinishPage
Var RunNowCheckbox
Var ShowReadmeCheckbox
Var RunNowState
Var ReadmeState
Function setFinishPage
nsDialogs::Create 1018
Pop $FinishPage
${NSD_CreateLabel} 0 0 100% 24 "Setup Complete"
Pop $0
${NSD_CreateCheckbox} 0 30 100% 12 "Run kanholec now"
Pop $RunNowCheckbox
${NSD_Check} $RunNowCheckbox
${NSD_CreateCheckbox} 0 46 100% 12 "Open config directory"
Pop $ShowReadmeCheckbox
nsDialogs::Show
FunctionEnd
Function .onGUIEnd
${NSD_GetState} $RunNowCheckbox $RunNowState
${NSD_GetState} $ShowReadmeCheckbox $ReadmeState
${If} $RunNowState == ${BST_CHECKED}
ExecShell "open" "$INSTDIR\kanholec.exe"
${EndIf}
${If} $ReadmeState == ${BST_CHECKED}
ExecShell "open" "$PROGRAMDATA\kanholec"
${EndIf}
FunctionEnd
Section "kanholec (required)" SEC_KANHOLEC
SectionIn RO
SetOutPath "$INSTDIR"
File "..\..\bin\kanholec-windows-amd64.exe"
Rename "$INSTDIR\kanholec-windows-amd64.exe" "$INSTDIR\kanholec.exe"
; Config directory
CreateDirectory "$PROGRAMDATA\kanholec"
SetOutPath "$PROGRAMDATA\kanholec"
File "/oname=kanholec.toml" "..\..\packaging\windows\kanholec.default.toml"
WriteUninstaller "$INSTDIR\uninstall.exe"
; Registry for uninstaller
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "DisplayName" "${PRODUCT_NAME}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\kanholec.exe,0"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "InstallLocation" "$INSTDIR"
WriteRegDWORD HKLM "${PRODUCT_UNINSTALL_KEY}" "NoModify" 1
WriteRegDWORD HKLM "${PRODUCT_UNINSTALL_KEY}" "NoRepair" 1
SectionEnd
Section "Start Menu Shortcuts" SEC_SHORTCUTS
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\kanholec.lnk" "$INSTDIR\kanholec.exe" "" "$INSTDIR\kanholec.exe" 0
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Config Directory.lnk" "$PROGRAMDATA\kanholec"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe"
SectionEnd
Section "Add to PATH" SEC_PATH
EnVar::AddValue "PATH" "$INSTDIR"
Pop $0
SectionEnd
Section "Desktop Shortcut" SEC_DESKTOP
CreateShortCut "$DESKTOP\kanholec.lnk" "$INSTDIR\kanholec.exe" "" "$INSTDIR\kanholec.exe" 0
SectionEnd
; Descriptions
LangString DESC_SEC_KANHOLEC ${LANG_ENGLISH} "kanholec binary and default configuration."
LangString DESC_SEC_SHORTCUTS ${LANG_ENGLISH} "Start menu shortcuts for kanholec."
LangString DESC_SEC_PATH ${LANG_ENGLISH} "Add kanholec installation directory to system PATH."
LangString DESC_SEC_DESKTOP ${LANG_ENGLISH} "Create a desktop shortcut for kanholec."
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_KANHOLEC} $(DESC_SEC_KANHOLEC)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_SHORTCUTS} $(DESC_SEC_SHORTCUTS)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_PATH} $(DESC_SEC_PATH)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $(DESC_SEC_DESKTOP)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section "Uninstall"
Delete "$INSTDIR\kanholec.exe"
Delete "$INSTDIR\uninstall.exe"
RMDir "$INSTDIR"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\kanholec.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Config Directory.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
Delete "$DESKTOP\kanholec.lnk"
EnVar::DeleteValue "PATH" "$INSTDIR"
DeleteRegKey HKLM "${PRODUCT_UNINSTALL_KEY}"
SectionEnd