فهرست منبع

fix(bundler): store and remove old main binary on updates if main binary name has change (#10962)

Amr Bashir 10 ماه پیش
والد
کامیت
b13cb208a3

+ 6 - 0
.changes/store-main-binary-name.md

@@ -0,0 +1,6 @@
+---
+"tauri-bundler": "patch:feat"
+---
+
+Store main binary name in registry for NSIS installer and delete old main binary on updates if the name changes.
+

+ 3 - 2
crates/tauri-bundler/src/bundle/windows/msi/wix.rs

@@ -546,8 +546,9 @@ pub fn build_wix_app_installer(
   let shortcut_guid = generate_package_guid(settings).to_string();
   data.insert("shortcut_guid", to_json(shortcut_guid.as_str()));
 
-  let app_exe_name = settings.main_binary_name().to_string();
-  data.insert("app_exe_name", to_json(app_exe_name));
+  // Note: `main_binary_name` is not used in our template but we keep it as it is potentially useful for custom temples
+  let main_binary_name = settings.main_binary_name().to_string();
+  data.insert("main_binary_name", to_json(&main_binary_name));
 
   let binaries = generate_binaries_data(settings)?;
 

+ 9 - 0
crates/tauri-bundler/src/bundle/windows/templates/installer.nsi

@@ -636,6 +636,15 @@ Section Install
     WriteRegStr SHCTX "${UNINSTKEY}" $MultiUser.InstallMode 1
   !endif
 
+  ; Remove old main binary if it doesn't match new main binary name
+  ReadRegStr $0 SHCTX "${UNINSTKEY}" "MainBinaryName"
+  ${If} $0 != "${MAINBINARYNAME}.exe"
+    Delete "$INSTDIR\$0"
+  ${EndIf}
+
+  ; Save current MAINBINARYNAME for future updates
+  WriteRegStr SHCTX "${UNINSTKEY}" "MainBinaryName" "${MAINBINARYNAME}.exe"
+
   ; Registry information for add/remove programs
   WriteRegStr SHCTX "${UNINSTKEY}" "DisplayName" "${PRODUCTNAME}"
   WriteRegStr SHCTX "${UNINSTKEY}" "DisplayIcon" "$\"$INSTDIR\${MAINBINARYNAME}.exe$\""