Skip to content

Commit f26d9f0

Browse files
authored
fix(bundler/nsis): remove empty resources folders on uninstall (#8263)
* fix(bundler/nsis): remove empty resources folders on uninstall * make clippy happy for once
1 parent 8accd69 commit f26d9f0

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

.changes/nsis-leftover-dirs.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@tauri-apps/cli": patch:bug
3+
"tauri-cli": patch:bug
4+
"tauri-bundler": patch:bug
5+
---
6+
7+
Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used.

tooling/bundler/src/bundle/windows/nsis.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,17 @@ fn build_nsis_app_installer(
303303
let resources = generate_resource_data(settings)?;
304304
let resources_dirs =
305305
std::collections::HashSet::<PathBuf>::from_iter(resources.values().map(|r| r.0.to_owned()));
306+
307+
let mut resources_ancestors = resources_dirs
308+
.iter()
309+
.flat_map(|p| p.ancestors())
310+
.collect::<Vec<_>>();
311+
resources_ancestors.sort_unstable();
312+
resources_ancestors.dedup();
313+
resources_ancestors.sort_by_key(|p| std::cmp::Reverse(p.components().count()));
314+
resources_ancestors.pop(); // Last one is always ""
315+
316+
data.insert("resources_ancestors", to_json(resources_ancestors));
306317
data.insert("resources_dirs", to_json(resources_dirs));
307318
data.insert("resources", to_json(&resources));
308319

tooling/bundler/src/bundle/windows/templates/installer.nsi

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,6 @@ Section Install
533533

534534
; Copy resources
535535
{{#each resources_dirs}}
536-
; `\\` is not a typo.
537536
CreateDirectory "$INSTDIR\\{{this}}"
538537
{{/each}}
539538
{{#each resources}}
@@ -623,7 +622,6 @@ Section Uninstall
623622
; Delete resources
624623
{{#each resources}}
625624
Delete "$INSTDIR\\{{this.[1]}}"
626-
RMDir "$INSTDIR\\{{this.[0]}}"
627625
{{/each}}
628626

629627
; Delete external binaries
@@ -634,7 +632,14 @@ Section Uninstall
634632
; Delete uninstaller
635633
Delete "$INSTDIR\uninstall.exe"
636634

637-
RMDir "$INSTDIR"
635+
${If} $DeleteAppDataCheckboxState == 1
636+
RMDir /R /REBOOTOK "$INSTDIR"
637+
${Else}
638+
{{#each resources_ancestors}}
639+
RMDir /REBOOTOK "$INSTDIR\\{{this}}"
640+
{{/each}}
641+
RMDir "$INSTDIR"
642+
${EndIf}
638643

639644
; Remove start menu shortcut
640645
!insertmacro MUI_STARTMENU_GETFOLDER Application $AppStartMenuFolder

0 commit comments

Comments
 (0)