From a29e21c8741bae5ffa4b71ae9c0156c1a491bfa9 Mon Sep 17 00:00:00 2001 From: Caelan Sayler Date: Mon, 26 May 2025 21:44:14 +0100 Subject: [PATCH] Fix bug: not cleaning up temp dirs --- src/bins/src/commands/uninstall.rs | 8 ++++++-- .../Velopack.Packaging.Windows/Msi/MsiBuilder.cs | 2 +- .../Msi/Templates/MsiTemplate.hbs | 4 ++-- src/wix-dll/src/lib.rs | 14 +++++++++----- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/bins/src/commands/uninstall.rs b/src/bins/src/commands/uninstall.rs index de444247..a9b77763 100644 --- a/src/bins/src/commands/uninstall.rs +++ b/src/bins/src/commands/uninstall.rs @@ -22,12 +22,16 @@ pub fn uninstall(locator: &VelopackLocator, delete_self: bool) -> Result<()> { info!("Removing directory '{:?}'", root_path); let _ = remove_dir_all::remove_dir_contents(&root_path); + let temp_dir = std::env::temp_dir(); + let temp_dir = temp_dir.join(format!("velopack_{}", locator.get_manifest_id())); + + info!("Removing directory '{:?}'", temp_dir); + let _ = remove_dir_all::remove_dir_all(&temp_dir); + if let Err(e) = windows::registry::remove_uninstall_entry(&locator) { error!("Unable to remove uninstall registry entry ({}).", e); } - // if it returns true, it was a success. - // if it returns false, it was completed with errors which the user should be notified of. let app_title = locator.get_manifest_title(); info!("Finished successfully."); diff --git a/src/vpk/Velopack.Packaging.Windows/Msi/MsiBuilder.cs b/src/vpk/Velopack.Packaging.Windows/Msi/MsiBuilder.cs index b0775d3d..483fbddb 100644 --- a/src/vpk/Velopack.Packaging.Windows/Msi/MsiBuilder.cs +++ b/src/vpk/Velopack.Packaging.Windows/Msi/MsiBuilder.cs @@ -85,7 +85,7 @@ public static class MsiBuilder var wixArch = data.IsArm64 ? "arm64" : data.Is64Bit ? "x64" : "x86"; Log.Info($"Configuring WiX in {wixArch} mode"); - var _1 = TempUtil.GetTempDirectory(out var outputDir); + using var _1 = TempUtil.GetTempDirectory(out var outputDir); var wixId = data.WixId; var wxsPath = Path.Combine(outputDir, wixId + ".wxs"); var localizationPath = Path.Combine(outputDir, wixId + "_en-US.wxs"); diff --git a/src/vpk/Velopack.Packaging.Windows/Msi/Templates/MsiTemplate.hbs b/src/vpk/Velopack.Packaging.Windows/Msi/Templates/MsiTemplate.hbs index 7f43f660..0604b59f 100644 --- a/src/vpk/Velopack.Packaging.Windows/Msi/Templates/MsiTemplate.hbs +++ b/src/vpk/Velopack.Packaging.Windows/Msi/Templates/MsiTemplate.hbs @@ -97,14 +97,14 @@ - - + diff --git a/src/wix-dll/src/lib.rs b/src/wix-dll/src/lib.rs index ccc07feb..efab716a 100644 --- a/src/wix-dll/src/lib.rs +++ b/src/wix-dll/src/lib.rs @@ -48,19 +48,23 @@ pub extern "system" fn CleanupDeferred(h_install: MSIHANDLE) -> c_uint { let mut custom_data = custom_data.split('"'); let install_dir = custom_data.next(); let app_id = custom_data.next(); + let temp_dir = custom_data.next(); - show_debug_message("CleanupDeferred", format!("install_dir={:?}, app_id={:?}", install_dir, app_id)); + show_debug_message("CleanupDeferred", format!("install_dir={:?}, app_id={:?}, temp_dir={:?}", install_dir, app_id, temp_dir)); if let Some(install_dir) = install_dir { if let Err(e) = remove_dir_all::remove_dir_all(install_dir) { - show_debug_message("CleanupDeferred", format!("Failed to remove install directory: {}", e)); + show_debug_message("CleanupDeferred", format!("Failed to remove install directory: {:?} {}", install_dir, e)); } } if let Some(app_id) = app_id { - let temp_dir = std::env::temp_dir(); - if let Err(e) = remove_dir_all::remove_dir_all(temp_dir.join(format!("velopack_{}", app_id))) { - show_debug_message("CleanupDeferred", format!("Failed to remove temp directory: {}", e)); + if let Some(temp_dir) = temp_dir { + let temp_dir = PathBuf::from(temp_dir); + let temp_dir = temp_dir.join(format!("velopack_{}", app_id)); + if let Err(e) = remove_dir_all::remove_dir_all(&temp_dir) { + show_debug_message("CleanupDeferred", format!("Failed to remove temp directory: {:?} {}", temp_dir, e)); + } } }