Files
VoiletMark/packaging/windows/installer.nsi
T
liyepan 53a015a1ea
安装包 / Linux aarch64 (push) Canceled after 0s
安装包 / Linux x86_64 (push) Canceled after 0s
安装包 / Windows x86_64 (push) Canceled after 0s
安装包 / macOS arm64 (Apple Silicon) (push) Canceled after 0s
安装包 / macOS x86_64 (Intel) (push) Canceled after 0s
安装包 / 发布到 Release (push) Canceled after 0s
feat: v0.12.4 —— 安装包工作流扩到 Windows / macOS
- 工作流改名 .github/workflows/packages.yml,新增 Windows 和两个 macOS job
- Windows:windeployqt 收运行库,NSIS 按当前用户装到 LOCALAPPDATA(免管理员),
  关联 .md、「打开方式」注册、开始菜单/桌面快捷方式、卸载项,另出便携 zip;
  安装包未签名
- macOS arm64:Homebrew Qt 5(原生 arm64,不依赖 Rosetta),macdeployqt 后把
  Homebrew 的 libpng/freetype 等依赖收进 app,再 ad-hoc 签名、打 dmg
- macOS x86_64:Qt 5.15.2 官方二进制 + macos-15-intel runner,同样签名打 dmg
- Release 汇总所有平台产物并生成 SHA256SUMS;某个平台失败不影响其它平台
- README 写清三平台产物、未签名打开方式、.md 关联和发版方式
2026-10-23 14:41:25 +08:00

117 lines
4.5 KiB
NSIS

; VoiletMark Windows 安装包(未签名)
; 按当前用户安装(不需要管理员权限),默认装到 %LOCALAPPDATA%\Programs\VoiletMark
Unicode true
!include "MUI2.nsh"
!include "LogicLib.nsh"
!ifndef APP_VERSION
!define APP_VERSION "0.0.0"
!endif
!ifndef DEPLOY_DIR
!error "需要 /DDEPLOY_DIR=<windeployqt 输出目录>"
!endif
!ifndef ICON_FILE
!define ICON_FILE "packaging\voiletmark.ico"
!endif
!ifndef OUTPUT_FILE
!define OUTPUT_FILE "dist\VoiletMark-setup.exe"
!endif
!define APP_NAME "VoiletMark"
!define APP_EXE "VoiletMark.exe"
!define APP_PUBLISHER "VoiletMark"
!define APP_ID "VoiletMark"
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_ID}"
Name "${APP_NAME} ${APP_VERSION}"
OutFile "${OUTPUT_FILE}"
InstallDir "$LOCALAPPDATA\Programs\${APP_NAME}"
InstallDirRegKey HKCU "Software\${APP_ID}" "InstallDir"
RequestExecutionLevel user
SetCompressor /SOLID lzma
CRCCheck on
BrandingText "${APP_NAME} ${APP_VERSION}"
!define MUI_ICON "${ICON_FILE}"
!define MUI_UNICON "${ICON_FILE}"
!define MUI_ABORTWARNING
!define MUI_WELCOMEPAGE_TITLE "${APP_NAME} ${APP_VERSION}"
!define MUI_WELCOMEPAGE_TEXT "把 ${APP_NAME} 装到当前用户目录,不需要管理员权限。$\r$\n$\r$\n安装后会把 .md 文件关联到 ${APP_NAME},随时可以在 Windows 设置里改回去。"
!define MUI_FINISHPAGE_RUN "$INSTDIR\${APP_EXE}"
!define MUI_FINISHPAGE_RUN_TEXT "立即运行 ${APP_NAME}"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "English"
Section "VoiletMark" SecMain
SetShellVarContext current
SetOutPath "$INSTDIR"
File /r "${DEPLOY_DIR}\*.*"
WriteUninstaller "$INSTDIR\uninstall.exe"
; 开始菜单 + 桌面快捷方式
CreateDirectory "$SMPROGRAMS\${APP_NAME}"
CreateShortcut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}"
CreateShortcut "$SMPROGRAMS\${APP_NAME}\卸载 ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
CreateShortcut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}"
; .md 关联(只写 HKCU,不动系统级关联)
WriteRegStr HKCU "Software\Classes\.md" "" "${APP_ID}.md"
WriteRegStr HKCU "Software\Classes\.md" "Content Type" "text/markdown"
WriteRegStr HKCU "Software\Classes\${APP_ID}.md" "" "Markdown 文档"
WriteRegStr HKCU "Software\Classes\${APP_ID}.md" "FriendlyTypeName" "Markdown 文档"
WriteRegStr HKCU "Software\Classes\${APP_ID}.md\DefaultIcon" "" "$INSTDIR\${APP_EXE},0"
WriteRegStr HKCU "Software\Classes\${APP_ID}.md\shell\open\command" "" '"$INSTDIR\${APP_EXE}" "%1"'
; 「打开方式」里也出现一份
WriteRegStr HKCU "Software\Classes\Applications\${APP_EXE}" "FriendlyAppName" "${APP_NAME}"
WriteRegStr HKCU "Software\Classes\Applications\${APP_EXE}\shell\open\command" "" '"$INSTDIR\${APP_EXE}" "%1"'
WriteRegStr HKCU "Software\Classes\Applications\${APP_EXE}\SupportedTypes" ".md" ""
; 让资源管理器立刻刷新图标 / 关联
System::Call 'shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
; 控制面板「卸载程序」
WriteRegStr HKCU "${UNINST_KEY}" "DisplayName" "${APP_NAME}"
WriteRegStr HKCU "${UNINST_KEY}" "DisplayVersion" "${APP_VERSION}"
WriteRegStr HKCU "${UNINST_KEY}" "Publisher" "${APP_PUBLISHER}"
WriteRegStr HKCU "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${APP_EXE}"
WriteRegStr HKCU "${UNINST_KEY}" "InstallLocation" "$INSTDIR"
WriteRegStr HKCU "${UNINST_KEY}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKCU "${UNINST_KEY}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S'
WriteRegDWORD HKCU "${UNINST_KEY}" "NoModify" 1
WriteRegDWORD HKCU "${UNINST_KEY}" "NoRepair" 1
WriteRegStr HKCU "Software\${APP_ID}" "InstallDir" "$INSTDIR"
SectionEnd
Section "Uninstall"
SetShellVarContext current
Delete "$DESKTOP\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\${APP_NAME}\卸载 ${APP_NAME}.lnk"
RMDir "$SMPROGRAMS\${APP_NAME}"
; 只在 .md 仍指向我们时才清掉默认值,别破坏用户后来改的关联
ReadRegStr $0 HKCU "Software\Classes\.md" ""
${If} $0 == "${APP_ID}.md"
DeleteRegValue HKCU "Software\Classes\.md" ""
${EndIf}
DeleteRegKey HKCU "Software\Classes\${APP_ID}.md"
DeleteRegKey HKCU "Software\Classes\Applications\${APP_EXE}"
DeleteRegKey HKCU "${UNINST_KEY}"
DeleteRegKey HKCU "Software\${APP_ID}"
RMDir /r "$INSTDIR"
System::Call 'shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
SectionEnd