13a15fed5c
Project CI / AI game creator shell Rust crates (push) Successful in 3m5s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m24s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 5m20s
Project CI / Backend tests (push) Successful in 6m42s
Project CI / Frontend tests (push) Successful in 3m2s
Project CI / Native shell tests (push) Successful in 7m16s
Project CI / AI game creator shell web tests (push) Successful in 3m17s
Project CI / Repository checks (push) Successful in 6m25s
为 release 与自定义渠道注入独立主程序名,隔离 Windows 更新进程。 新增 release 旧安装目录与快捷方式迁移钩子,保护 dev 历史目录清理。 同步渠道规范、共享决策与排障记录,补充发布脚本回归测试。
83 lines
3.8 KiB
NSIS
83 lines
3.8 KiB
NSIS
; AGC release 渠道的 Windows 安装迁移钩子。
|
||
;
|
||
; release 曾使用「陶泥儿 Release」作为 productName,后来统一为「陶泥儿」。
|
||
; Tauri 的 NSIS 更新模式不会为改名后的身份重建快捷方式,也不会自动读取旧身份的安装目录,
|
||
; 所以这里把旧安装目录、旧快捷方式迁移到当前 release 身份。
|
||
;
|
||
; release 渠道同时使用独立的 MAINBINARYNAME(genarrative-ai-game-creator-shell-release),
|
||
; NSIS 默认的按文件名查杀逻辑因此不会碰 dev 渠道的主进程。
|
||
;
|
||
!define AGC_RELEASE_LEGACY_IDENTITY "陶泥儿 Release"
|
||
!define AGC_RELEASE_LEGACY_BINARY "genarrative-ai-game-creator-shell"
|
||
|
||
Var AgcReleaseLegacyInstallDir
|
||
Var AgcReleaseMigratedDesktopShortcut
|
||
|
||
; Tauri 模板会在 Section Install 开头先执行 SetOutPath,再展开 PREINSTALL 宏。
|
||
; 此处仍可在复制文件前改写 $INSTDIR,让旧 release 安装原地升级。
|
||
!macro NSIS_HOOK_PREINSTALL
|
||
StrCpy $AgcReleaseLegacyInstallDir ""
|
||
ReadRegStr $R0 SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AGC_RELEASE_LEGACY_IDENTITY}" "InstallLocation"
|
||
; Tauri 将 InstallLocation 写成带引号的 REG_SZ;去掉包裹引号后再交给 FileExists。
|
||
StrCpy $R1 $R0 1
|
||
${If} $R1 == '$\"'
|
||
StrCpy $R0 $R0 "" 1
|
||
StrLen $R1 $R0
|
||
IntOp $R1 $R1 - 1
|
||
StrCpy $R0 $R0 $R1
|
||
${EndIf}
|
||
${If} $R0 != ""
|
||
${AndIf} ${FileExists} "$R0\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
StrCpy $AgcReleaseLegacyInstallDir $R0
|
||
StrCpy $INSTDIR $R0
|
||
${EndIf}
|
||
!macroend
|
||
|
||
!macro NSIS_HOOK_POSTINSTALL
|
||
; 更新模式下模板不会重建快捷方式。先把旧名称和旧主程序名指向当前 release。
|
||
!insertmacro IsShortcutTarget "$DESKTOP\${AGC_RELEASE_LEGACY_IDENTITY}.lnk" "$INSTDIR\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
Pop $0
|
||
${If} $0 = 1
|
||
StrCpy $AgcReleaseMigratedDesktopShortcut 1
|
||
!insertmacro UnpinShortcut "$DESKTOP\${AGC_RELEASE_LEGACY_IDENTITY}.lnk"
|
||
Delete "$DESKTOP\${AGC_RELEASE_LEGACY_IDENTITY}.lnk"
|
||
${EndIf}
|
||
|
||
!insertmacro IsShortcutTarget "$SMPROGRAMS\${AGC_RELEASE_LEGACY_IDENTITY}.lnk" "$INSTDIR\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
Pop $0
|
||
${If} $0 = 1
|
||
!insertmacro UnpinShortcut "$SMPROGRAMS\${AGC_RELEASE_LEGACY_IDENTITY}.lnk"
|
||
Delete "$SMPROGRAMS\${AGC_RELEASE_LEGACY_IDENTITY}.lnk"
|
||
${EndIf}
|
||
|
||
; 用户可能早已把快捷方式改成当前名称,但仍指向旧主程序名。
|
||
!insertmacro IsShortcutTarget "$DESKTOP\${PRODUCTNAME}.lnk" "$INSTDIR\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
Pop $0
|
||
${If} $0 = 1
|
||
!insertmacro SetShortcutTarget "$DESKTOP\${PRODUCTNAME}.lnk" "$INSTDIR\${MAINBINARYNAME}.exe"
|
||
${EndIf}
|
||
!insertmacro IsShortcutTarget "$SMPROGRAMS\${PRODUCTNAME}.lnk" "$INSTDIR\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
Pop $0
|
||
${If} $0 = 1
|
||
!insertmacro SetShortcutTarget "$SMPROGRAMS\${PRODUCTNAME}.lnk" "$INSTDIR\${MAINBINARYNAME}.exe"
|
||
${EndIf}
|
||
|
||
; 开始菜单图标始终存在;桌面图标只在迁移前存在时补建,保持用户选择。
|
||
StrCpy $R0 "$INSTDIR\${MAINBINARYNAME}.exe"
|
||
${IfNot} ${FileExists} "$SMPROGRAMS\${PRODUCTNAME}.lnk"
|
||
CreateShortCut "$SMPROGRAMS\${PRODUCTNAME}.lnk" "$R0"
|
||
!insertmacro SetLnkAppUserModelId "$SMPROGRAMS\${PRODUCTNAME}.lnk"
|
||
${EndIf}
|
||
${If} $AgcReleaseMigratedDesktopShortcut = 1
|
||
CreateShortCut "$DESKTOP\${PRODUCTNAME}.lnk" "$R0"
|
||
!insertmacro SetLnkAppUserModelId "$DESKTOP\${PRODUCTNAME}.lnk"
|
||
${EndIf}
|
||
|
||
; 新 release 已接管旧安装目录后,删除旧主程序,避免 dev 的迁移钩子把该目录误判为旧 dev。
|
||
${If} $AgcReleaseLegacyInstallDir != ""
|
||
Delete "$INSTDIR\${AGC_RELEASE_LEGACY_BINARY}.exe"
|
||
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AGC_RELEASE_LEGACY_IDENTITY}"
|
||
DeleteRegKey HKCU "Software\genarrative\${AGC_RELEASE_LEGACY_IDENTITY}"
|
||
${EndIf}
|
||
!macroend
|