Files
kanhole/packaging/windows/frpc.nsi
T

149 lines
4.6 KiB
NSIS

; frpc Windows Installer (NSIS)
; Build: makensis frpc.nsi
; Requires: NSIS 3.x (https://nsis.sourceforge.io)
!define PRODUCT_NAME "frpc"
!define PRODUCT_VERSION "0.62.0"
!define PRODUCT_PUBLISHER "frp Contributors"
!define PRODUCT_WEB_SITE "https://github.com/fatedier/frp"
!define PRODUCT_DIR "$PROGRAMFILES64\${PRODUCT_NAME}"
!define PRODUCT_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "..\..\bin\frpc-${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 frpc 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\frpc.exe"
${EndIf}
${If} $ReadmeState == ${BST_CHECKED}
ExecShell "open" "$PROGRAMDATA\frpc"
${EndIf}
FunctionEnd
Section "frpc (required)" SEC_FRPC
SectionIn RO
SetOutPath "$INSTDIR"
File "..\..\bin\frpc-windows-amd64.exe"
Rename "$INSTDIR\frpc-windows-amd64.exe" "$INSTDIR\frpc.exe"
; Config directory
CreateDirectory "$PROGRAMDATA\frpc"
SetOutPath "$PROGRAMDATA\frpc"
File "/oname=frpc.toml" "..\..\packaging\windows\frpc.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\frpc.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}\frpc.lnk" "$INSTDIR\frpc.exe" "" "$INSTDIR\frpc.exe" 0
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Config Directory.lnk" "$PROGRAMDATA\frpc"
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\frpc.lnk" "$INSTDIR\frpc.exe" "" "$INSTDIR\frpc.exe" 0
SectionEnd
; Descriptions
LangString DESC_SEC_FRPC ${LANG_ENGLISH} "frpc binary and default configuration."
LangString DESC_SEC_SHORTCUTS ${LANG_ENGLISH} "Start menu shortcuts for frpc."
LangString DESC_SEC_PATH ${LANG_ENGLISH} "Add frpc installation directory to system PATH."
LangString DESC_SEC_DESKTOP ${LANG_ENGLISH} "Create a desktop shortcut for frpc."
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_FRPC} $(DESC_SEC_FRPC)
!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\frpc.exe"
Delete "$INSTDIR\uninstall.exe"
RMDir "$INSTDIR"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\frpc.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Config Directory.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
Delete "$DESKTOP\frpc.lnk"
EnVar::DeleteValue "PATH" "$INSTDIR"
DeleteRegKey HKLM "${PRODUCT_UNINSTALL_KEY}"
SectionEnd