From f66bc3c2b8360b8b685dcadeb373852abe43d9e5 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sat, 23 Apr 2022 07:01:52 -0700 Subject: [PATCH] fix(bundler): DLL resources, closes #3948 (#3949) --- .changes/fix-dll-resource.md | 5 ++ tooling/bundler/src/bundle/windows/msi/wix.rs | 63 ++++++++++--------- 2 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 .changes/fix-dll-resource.md diff --git a/.changes/fix-dll-resource.md b/.changes/fix-dll-resource.md new file mode 100644 index 000000000..37fc1e441 --- /dev/null +++ b/.changes/fix-dll-resource.md @@ -0,0 +1,5 @@ +--- +"tauri-bundler": patch +--- + +Fixes DLL resource usage on Windows. diff --git a/tooling/bundler/src/bundle/windows/msi/wix.rs b/tooling/bundler/src/bundle/windows/msi/wix.rs index 5e3e92e73..4d875337b 100644 --- a/tooling/bundler/src/bundle/windows/msi/wix.rs +++ b/tooling/bundler/src/bundle/windows/msi/wix.rs @@ -796,34 +796,7 @@ fn generate_resource_data(settings: &Settings) -> crate::Result { let mut resources = ResourceMap::new(); let cwd = std::env::current_dir()?; - let mut dlls = vec![]; - for dll in glob::glob( - settings - .project_out_directory() - .join("*.dll") - .to_string_lossy() - .to_string() - .as_str(), - )? { - let path = dll?; - let resource_path = path.to_string_lossy().to_string(); - dlls.push(ResourceFile { - id: format!("I{}", Uuid::new_v4().as_simple()), - guid: Uuid::new_v4().to_string(), - path: resource_path, - }); - } - if !dlls.is_empty() { - resources.insert( - "".to_string(), - ResourceDirectory { - path: "".to_string(), - name: "".to_string(), - directories: vec![], - files: dlls, - }, - ); - } + let mut added_resources = Vec::new(); for src in settings.resource_files() { let src = src?; @@ -834,6 +807,8 @@ fn generate_resource_data(settings: &Settings) -> crate::Result { .into_string() .expect("failed to read resource path"); + added_resources.push(resource_path.clone()); + let resource_entry = ResourceFile { id: format!("I{}", Uuid::new_v4().as_simple()), guid: Uuid::new_v4().to_string(), @@ -904,5 +879,37 @@ fn generate_resource_data(settings: &Settings) -> crate::Result { directory_entry.add_file(resource_entry); } + let mut dlls = Vec::new(); + + let out_dir = settings.project_out_directory(); + for dll in glob::glob(out_dir.join("*.dll").to_string_lossy().to_string().as_str())? { + let path = dll?; + let resource_path = path.to_string_lossy().into_owned(); + let relative_path = path + .strip_prefix(&out_dir) + .unwrap() + .to_string_lossy() + .into_owned(); + if !added_resources.iter().any(|r| r.ends_with(&relative_path)) { + dlls.push(ResourceFile { + id: format!("I{}", Uuid::new_v4().as_simple()), + guid: Uuid::new_v4().to_string(), + path: resource_path, + }); + } + } + + if !dlls.is_empty() { + resources.insert( + "".to_string(), + ResourceDirectory { + path: "".to_string(), + name: "".to_string(), + directories: vec![], + files: dlls, + }, + ); + } + Ok(resources) }