From 402f27b2a38499ea13177c6eae87d35904fba2e3 Mon Sep 17 00:00:00 2001 From: MystiPanda Date: Wed, 8 May 2024 14:52:38 +0800 Subject: [PATCH] fix: bundle error --- .github/workflows/release.yml | 3 - package.json | 2 +- pnpm-lock.yaml | 90 ++++++++++++------------- src-tauri/template/installer.nsi | 109 ++++++++++++++++++++----------- 4 files changed, 116 insertions(+), 88 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2ce40bfd..79edb0fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,8 +66,6 @@ jobs: tagName: v__VERSION__ releaseName: "Clash Verge Rev v__VERSION__" releaseBody: "More new features are now supported." - releaseDraft: false - prerelease: false tauriScript: pnpm args: --target ${{ matrix.target }} @@ -201,7 +199,6 @@ jobs: tag_name: v${{steps.build.outputs.appVersion}} name: "Clash Verge Rev v${{steps.build.outputs.appVersion}}" body: "More new features are now supported." - prerelease: true token: ${{ secrets.GITHUB_TOKEN }} files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup* diff --git a/package.json b/package.json index 0d8d17c1..89267c15 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@actions/github": "^5.1.1", - "@tauri-apps/cli": "1.5.12", + "@tauri-apps/cli": "^1.5.13", "@types/fs-extra": "^9.0.13", "@types/js-cookie": "^3.0.6", "@types/lodash-es": "^4.17.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 000a9585..3c812713 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,8 +111,8 @@ importers: specifier: ^5.1.1 version: 5.1.1 "@tauri-apps/cli": - specifier: 1.5.12 - version: 1.5.12 + specifier: ^1.5.13 + version: 1.5.13 "@types/fs-extra": specifier: ^9.0.13 version: 9.0.13 @@ -1299,100 +1299,100 @@ packages: } engines: { node: ">= 14.6.0", npm: ">= 6.6.0", yarn: ">= 1.19.1" } - "@tauri-apps/cli-darwin-arm64@1.5.12": + "@tauri-apps/cli-darwin-arm64@1.5.13": resolution: { - integrity: sha512-ud06E547WE7oDZeN5rH4eeB90Rie0aSCFH0Zb6XyNb6qgg0ZIftM+N3OjVONxk84/g//nr4/x7wW6LOwiwvPHw==, + integrity: sha512-wXsBp6FIsQ1yoAEJ8dao7BkVdOp5xlfgGyAbJVCFKU3LTUqKw4A+ayxO6CV2lFfSaOdzdU86z+eJsl38nzmoSg==, } engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - "@tauri-apps/cli-darwin-x64@1.5.12": + "@tauri-apps/cli-darwin-x64@1.5.13": resolution: { - integrity: sha512-hSz9cuHO4lYora0z2XRFEIblkStT3eJvh/iYmsFfjT3usGBt2fTPMJ4SnL1Uyu64Y59dqyRNBikuBuymAFESjA==, + integrity: sha512-1I/8Q8ogr1P1iQhjsXw0DSPjb8r2ggx2h52X1NXODhBknWIG7Y3rPDnRSXg1qoauRi19728BmP/CSW6MugidwQ==, } engines: { node: ">= 10" } cpu: [x64] os: [darwin] - "@tauri-apps/cli-linux-arm-gnueabihf@1.5.12": + "@tauri-apps/cli-linux-arm-gnueabihf@1.5.13": resolution: { - integrity: sha512-FanE15/c7nz64CcTFe7f+8b7+rFQCb3Ivju+4sxVSPkAOJXHc5no3Y/LxFt85SAOMgPTB2FMuxHUdjvLjd2D1w==, + integrity: sha512-IHtE8YGZ4KV0fX8w6a8lftFGLsDCr/kbikKIgvUQdypImToCr4MKbyKQ6guwSGPlCExtHpD7+LOtFoRocLCtBw==, } engines: { node: ">= 10" } cpu: [arm] os: [linux] - "@tauri-apps/cli-linux-arm64-gnu@1.5.12": + "@tauri-apps/cli-linux-arm64-gnu@1.5.13": resolution: { - integrity: sha512-ETVyIcR4xVGnuhTgTY+kPG5LbAJQobPA8OxSLRY203f0cqYuSPffgyahtS65uPJ9egWIN3fflDKGTE1xcgFNAA==, + integrity: sha512-U01Jvr0YoBwqRJ1lf+lzFRrNwhfdP4HF/3p1ahFzSoQ6CuYk0pL1jYmsYA7PigKmmovu8ctNq9E9quSdquOIeQ==, } engines: { node: ">= 10" } cpu: [arm64] os: [linux] - "@tauri-apps/cli-linux-arm64-musl@1.5.12": + "@tauri-apps/cli-linux-arm64-musl@1.5.13": resolution: { - integrity: sha512-ZhMagbS50dDV9glHrtRg1bkUa7sUDPsZ9bJ0xnd0vr8Smi8RiJ/dgQbF5eQNp4ahzYl+FtLjBkMTZKACrKgusg==, + integrity: sha512-+UVxc5yQavLWnsFCDYXp4HxDxhyuDt+V2IOdy+ClO/xJ8ii5vFz1QYQBm9s1ofXWPXn5BYyBVNhGuPstAYcO9A==, } engines: { node: ">= 10" } cpu: [arm64] os: [linux] - "@tauri-apps/cli-linux-x64-gnu@1.5.12": + "@tauri-apps/cli-linux-x64-gnu@1.5.13": resolution: { - integrity: sha512-H6jXU4AG8g6FZxX+U3M76zigbLvj7bE+wG+xOrS7xCRwkfAEKw0aulymdFfOl44KBZDQQsV5KYA6T6csx3KbIQ==, + integrity: sha512-QDIkbpMprEe08V9Yn+XMbQa2ErY9Cj6TlvcSGLzida4gAVHwf42AMxBBFSvjpdMyB7D5lJMsDSq5xhEeRPs/HQ==, } engines: { node: ">= 10" } cpu: [x64] os: [linux] - "@tauri-apps/cli-linux-x64-musl@1.5.12": + "@tauri-apps/cli-linux-x64-musl@1.5.13": resolution: { - integrity: sha512-Y/0dzBD8oFZ04Xq75LKPJvOI2MbVFdwGY6w41l24OxNiNopF7AzdrZGTJ+MoUbU9PALNP8ABhOP6BYZiV528OA==, + integrity: sha512-7JHNrF0b8Y7R693SG8JWhWmt/3d6vhyswEu26NUxQG2IYQlVY51sDPkub7S1cynh4++7CMV5sNK0EUr6hLrR9A==, } engines: { node: ">= 10" } cpu: [x64] os: [linux] - "@tauri-apps/cli-win32-arm64-msvc@1.5.12": + "@tauri-apps/cli-win32-arm64-msvc@1.5.13": resolution: { - integrity: sha512-fxCS1/zQp+W7Lze+6Sh64RLqWFE57NsU+Y9L30ZKt5Prnt2LXEoa3POSaQpgHLRgwL/WfDW2nkYBRH3fVIrpQg==, + integrity: sha512-p+j3IcrPnQ7/iaMlrdDBGT2SlB6MzjTbSdLo1jNE3DAeO98jByIJZyNme07Fv87280+2LXVB5XtusCsgTwIHCw==, } engines: { node: ">= 10" } cpu: [arm64] os: [win32] - "@tauri-apps/cli-win32-ia32-msvc@1.5.12": + "@tauri-apps/cli-win32-ia32-msvc@1.5.13": resolution: { - integrity: sha512-keWSEBOxL8q750AzmL4L3DDJzDzmb6DGT3+0HTjbEfu+a2GRS1lnrkm3EEeAepPoz4r62+cOQbjPRP8YGtGfFw==, + integrity: sha512-ypxRAGd8QYOCaBUmqzvHvrzj64OgfhzZQS/TSQlKWeJ9X1oQzQDNUrifsdaZZvZBf9yqSRf8lMYoN5qFjrHZfA==, } engines: { node: ">= 10" } cpu: [ia32] os: [win32] - "@tauri-apps/cli-win32-x64-msvc@1.5.12": + "@tauri-apps/cli-win32-x64-msvc@1.5.13": resolution: { - integrity: sha512-+eIvaPVwtVM7puXlCZIS1lSFF0VZ0gAUShKwk/kBZi8xUYQoNEW2RUWSPp+TEdZsMiAxd/zFZ+tGgv83Hxjbjg==, + integrity: sha512-B3YDAyZb8f6zKqZj/ydL/cQVkT/KxNyumXsX+UL4oM5E2DM89OD5BxMgqGr7zwmJSaRNRHkXRK+BMluvZjHG9w==, } engines: { node: ">= 10" } cpu: [x64] os: [win32] - "@tauri-apps/cli@1.5.12": + "@tauri-apps/cli@1.5.13": resolution: { - integrity: sha512-tMvcMVIrvNjoPIVO5pZk7lJrHVXw7NBggpJXRAQsD7VkMW9hT1uX3jVZeoPCmQ5KbpXvjoNXe+Ws8nE2NR/8Ow==, + integrity: sha512-wULOJNb/Dxc/E+Z0+7MkaqKYAmdjGJEFpZ5xcNhvC3BVX1O6MbhHjXGfwfu4mgIGhVqY1KJaKoXx7EDZAlk7Pw==, } engines: { node: ">= 10" } hasBin: true @@ -4236,48 +4236,48 @@ snapshots: "@tauri-apps/api@1.5.4": {} - "@tauri-apps/cli-darwin-arm64@1.5.12": + "@tauri-apps/cli-darwin-arm64@1.5.13": optional: true - "@tauri-apps/cli-darwin-x64@1.5.12": + "@tauri-apps/cli-darwin-x64@1.5.13": optional: true - "@tauri-apps/cli-linux-arm-gnueabihf@1.5.12": + "@tauri-apps/cli-linux-arm-gnueabihf@1.5.13": optional: true - "@tauri-apps/cli-linux-arm64-gnu@1.5.12": + "@tauri-apps/cli-linux-arm64-gnu@1.5.13": optional: true - "@tauri-apps/cli-linux-arm64-musl@1.5.12": + "@tauri-apps/cli-linux-arm64-musl@1.5.13": optional: true - "@tauri-apps/cli-linux-x64-gnu@1.5.12": + "@tauri-apps/cli-linux-x64-gnu@1.5.13": optional: true - "@tauri-apps/cli-linux-x64-musl@1.5.12": + "@tauri-apps/cli-linux-x64-musl@1.5.13": optional: true - "@tauri-apps/cli-win32-arm64-msvc@1.5.12": + "@tauri-apps/cli-win32-arm64-msvc@1.5.13": optional: true - "@tauri-apps/cli-win32-ia32-msvc@1.5.12": + "@tauri-apps/cli-win32-ia32-msvc@1.5.13": optional: true - "@tauri-apps/cli-win32-x64-msvc@1.5.12": + "@tauri-apps/cli-win32-x64-msvc@1.5.13": optional: true - "@tauri-apps/cli@1.5.12": + "@tauri-apps/cli@1.5.13": optionalDependencies: - "@tauri-apps/cli-darwin-arm64": 1.5.12 - "@tauri-apps/cli-darwin-x64": 1.5.12 - "@tauri-apps/cli-linux-arm-gnueabihf": 1.5.12 - "@tauri-apps/cli-linux-arm64-gnu": 1.5.12 - "@tauri-apps/cli-linux-arm64-musl": 1.5.12 - "@tauri-apps/cli-linux-x64-gnu": 1.5.12 - "@tauri-apps/cli-linux-x64-musl": 1.5.12 - "@tauri-apps/cli-win32-arm64-msvc": 1.5.12 - "@tauri-apps/cli-win32-ia32-msvc": 1.5.12 - "@tauri-apps/cli-win32-x64-msvc": 1.5.12 + "@tauri-apps/cli-darwin-arm64": 1.5.13 + "@tauri-apps/cli-darwin-x64": 1.5.13 + "@tauri-apps/cli-linux-arm-gnueabihf": 1.5.13 + "@tauri-apps/cli-linux-arm64-gnu": 1.5.13 + "@tauri-apps/cli-linux-arm64-musl": 1.5.13 + "@tauri-apps/cli-linux-x64-gnu": 1.5.13 + "@tauri-apps/cli-linux-x64-musl": 1.5.13 + "@tauri-apps/cli-win32-arm64-msvc": 1.5.13 + "@tauri-apps/cli-win32-ia32-msvc": 1.5.13 + "@tauri-apps/cli-win32-x64-msvc": 1.5.13 "@types/babel__core@7.20.5": dependencies: diff --git a/src-tauri/template/installer.nsi b/src-tauri/template/installer.nsi index 31fa15cd..d61e12eb 100644 --- a/src-tauri/template/installer.nsi +++ b/src-tauri/template/installer.nsi @@ -13,8 +13,9 @@ Unicode true !include FileFunc.nsh !include x64.nsh !include WordFunc.nsh -!include "LogicLib.nsh" !include "StrFunc.nsh" +!include "Win\COM.nsh" +!include "Win\Propkey.nsh" !addplugindir "$%AppData%\Local\NSIS\" ${StrCase} ${StrLoc} @@ -149,7 +150,6 @@ Function PageReinstall ; however, this should be fine since the user will have to confirm the uninstallation ; and they can chose to abort it if doesn't make sense. StrCpy $0 0 - wix_loop: EnumRegKey $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $0 StrCmp $1 "" wix_done ; Exit loop if there is no more keys to loop on @@ -571,7 +571,7 @@ Section WebView2 !if "${INSTALLWEBVIEW2MODE}" == "downloadBootstrapper" Delete "$TEMP\MicrosoftEdgeWebview2Setup.exe" DetailPrint "$(webview2Downloading)" - nsis_tauri_utils::download "https://go.microsoft.com/fwlink/p/?LinkId=2124703" "$TEMP\MicrosoftEdgeWebview2Setup.exe" + NSISdl::download "https://go.microsoft.com/fwlink/p/?LinkId=2124703" "$TEMP\MicrosoftEdgeWebview2Setup.exe" Pop $0 ${If} $0 == 0 DetailPrint "$(webview2DownloadSuccess)" @@ -730,7 +730,8 @@ Function .onInstSuccess check_r_flag: ${GetOptions} $CMDLINE "/R" $R0 IfErrors run_done 0 - Exec '"$INSTDIR\${MAINBINARYNAME}.exe"' + ${GetOptions} $CMDLINE "/ARGS" $R0 + Exec '"$INSTDIR\${MAINBINARYNAME}.exe" $R0' run_done: FunctionEnd @@ -743,30 +744,35 @@ Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd - -Function un.isDirectoryEmpty - Exch $0 - Push $1 - Push $2 - StrCpy $2 0 - FindFirst $1 $2 "$0\*.*" - loop: - StrCmp $2 "" done - StrCmp $2 "." next - StrCmp $2 ".." next - StrCpy $0 0 - goto done - next: - FindNext $1 $2 - goto loop - done: - FindClose $1 - StrCmp $2 "" 0 +2 - StrCpy $0 1 - Pop $2 - Pop $1 - Exch $0 -FunctionEnd + +!macro DeleteAppUserModelId + !insertmacro ComHlpr_CreateInProcInstance ${CLSID_DestinationList} ${IID_ICustomDestinationList} r1 "" + ${If} $1 P<> 0 + ${ICustomDestinationList::DeleteList} $1 '("${BUNDLEID}")' + ${IUnknown::Release} $1 "" + ${EndIf} + !insertmacro ComHlpr_CreateInProcInstance ${CLSID_ApplicationDestinations} ${IID_IApplicationDestinations} r1 "" + ${If} $1 P<> 0 + ${IApplicationDestinations::SetAppID} $1 '("${BUNDLEID}")i.r0' + ${If} $0 >= 0 + ${IApplicationDestinations::RemoveAllDestinations} $1 '' + ${EndIf} + ${IUnknown::Release} $1 "" + ${EndIf} +!macroend + +; From https://stackoverflow.com/a/42816728/16993372 +!macro UnpinShortcut shortcut + !insertmacro ComHlpr_CreateInProcInstance ${CLSID_StartMenuPin} ${IID_IStartMenuPinnedList} r0 "" + ${If} $0 P<> 0 + System::Call 'SHELL32::SHCreateItemFromParsingName(ws, p0, g "${IID_IShellItem}", *p0r1)' "${shortcut}" + ${If} $1 P<> 0 + ${IStartMenuPinnedList::RemoveFromList} $0 '(r1)' + ${IUnknown::Release} $1 "" + ${EndIf} + ${IUnknown::Release} $0 "" + ${EndIf} +!macroend Section Uninstall !insertmacro CheckIfAppIsRunning @@ -789,15 +795,14 @@ Section Uninstall ; Delete uninstaller Delete "$INSTDIR\uninstall.exe" - ; Remove InstallDir - Push "$INSTDIR" - Call un.isDirectoryEmpty - Pop $0 - ${If} $0 == 1 - RMDir /R /REBOOTOK "$INSTDIR" - ${Else} - MessageBox MB_OK "Install Directory is not Empty, Please remove it manually." - ${EndIf} + {{#each resources_ancestors}} + RMDir /REBOOTOK "$INSTDIR\\{{this}}" + {{/each}} + RMDir "$INSTDIR" + + !insertmacro DeleteAppUserModelId + !insertmacro UnpinShortcut "$SMPROGRAMS\$AppStartMenuFolder\${MAINBINARYNAME}.lnk" + !insertmacro UnpinShortcut "$DESKTOP\${MAINBINARYNAME}.lnk" ; Remove start menu shortcut !insertmacro MUI_STARTMENU_GETFOLDER Application $AppStartMenuFolder @@ -840,13 +845,39 @@ Function SkipIfPassive ${IfThen} $PassiveMode == 1 ${|} Abort ${|} FunctionEnd +!macro SetLnkAppUserModelId shortcut + !insertmacro ComHlpr_CreateInProcInstance ${CLSID_ShellLink} ${IID_IShellLink} r0 "" + ${If} $0 P<> 0 + ${IUnknown::QueryInterface} $0 '("${IID_IPersistFile}",.r1)' + ${If} $1 P<> 0 + ${IPersistFile::Load} $1 '("${shortcut}", ${STGM_READWRITE})' + ${IUnknown::QueryInterface} $0 '("${IID_IPropertyStore}",.r2)' + ${If} $2 P<> 0 + System::Call 'Oleaut32::SysAllocString(w "${BUNDLEID}") i.r3' + System::Call '*${SYSSTRUCT_PROPERTYKEY}(${PKEY_AppUserModel_ID})p.r4' + System::Call '*${SYSSTRUCT_PROPVARIANT}(${VT_BSTR},,&i4 $3)p.r5' + ${IPropertyStore::SetValue} $2 '($4,$5)' + + System::Call 'Oleaut32::SysFreeString($3)' + System::Free $4 + System::Free $5 + ${IPropertyStore::Commit} $2 "" + ${IUnknown::Release} $2 "" + ${IPersistFile::Save} $1 '("${shortcut}",1)' + ${EndIf} + ${IUnknown::Release} $1 "" + ${EndIf} + ${IUnknown::Release} $0 "" + ${EndIf} +!macroend + Function CreateDesktopShortcut CreateShortcut "$DESKTOP\${MAINBINARYNAME}.lnk" "$INSTDIR\${MAINBINARYNAME}.exe" - ApplicationID::Set "$DESKTOP\${MAINBINARYNAME}.lnk" "${BUNDLEID}" + !insertmacro SetLnkAppUserModelId "$DESKTOP\${MAINBINARYNAME}.lnk" FunctionEnd Function CreateStartMenuShortcut CreateDirectory "$SMPROGRAMS\$AppStartMenuFolder" CreateShortcut "$SMPROGRAMS\$AppStartMenuFolder\${MAINBINARYNAME}.lnk" "$INSTDIR\${MAINBINARYNAME}.exe" - ApplicationID::Set "$SMPROGRAMS\$AppStartMenuFolder\${MAINBINARYNAME}.lnk" "${BUNDLEID}" + !insertmacro SetLnkAppUserModelId "$SMPROGRAMS\$AppStartMenuFolder\${MAINBINARYNAME}.lnk" FunctionEnd