From 4176f93ae43ef66714c4934feb3df19df3a3e28a Mon Sep 17 00:00:00 2001 From: chfaft <129761080+chfaft@users.noreply.github.com> Date: Tue, 2 Dec 2025 02:58:35 +0100 Subject: [PATCH] feat(bundler): consider extensions defined in main.wxs. (#14570) * feat(bundler): consider extensions defined in main.wxs. * chore(bundler): apply nitpick and add a change file. * Update crates/tauri-bundler/src/bundle/windows/msi/mod.rs chore(bundler): avoid clone and use reference. Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> * Update .changes/support-template-extensions.md chore(bundler): reclassify changes. Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> --- .changes/support-template-extensions.md | 5 +++++ .../src/bundle/windows/msi/mod.rs | 20 ++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 .changes/support-template-extensions.md diff --git a/.changes/support-template-extensions.md b/.changes/support-template-extensions.md new file mode 100644 index 000000000..8fa4654c9 --- /dev/null +++ b/.changes/support-template-extensions.md @@ -0,0 +1,5 @@ +--- +tauri-bundler: patch:enhance +--- + +Consider extensions that are defined in the wxs template. diff --git a/crates/tauri-bundler/src/bundle/windows/msi/mod.rs b/crates/tauri-bundler/src/bundle/windows/msi/mod.rs index cc5f83883..4c00d8f33 100644 --- a/crates/tauri-bundler/src/bundle/windows/msi/mod.rs +++ b/crates/tauri-bundler/src/bundle/windows/msi/mod.rs @@ -753,26 +753,28 @@ pub fn build_wix_app_installer( } let main_wxs_path = output_path.join("main.wxs"); - fs::write(main_wxs_path, handlebars.render("main.wxs", &data)?)?; + fs::write(&main_wxs_path, handlebars.render("main.wxs", &data)?)?; - let mut candle_inputs = vec![("main.wxs".into(), Vec::new())]; + let mut candle_inputs = vec![]; let current_dir = std::env::current_dir()?; let extension_regex = Regex::new("\"http://schemas.microsoft.com/wix/(\\w+)\"")?; - for fragment_path in fragment_paths { - let fragment_path = current_dir.join(fragment_path); - let fragment_content = fs::read_to_string(&fragment_path)?; - let fragment_handlebars = Handlebars::new(); - let fragment = fragment_handlebars.render_template(&fragment_content, &data)?; + let input_paths = + std::iter::once(main_wxs_path).chain(fragment_paths.iter().map(|p| current_dir.join(p))); + + for input_path in input_paths { + let input_content = fs::read_to_string(&input_path)?; + let input_handlebars = Handlebars::new(); + let input = input_handlebars.render_template(&input_content, &data)?; let mut extensions = Vec::new(); - for cap in extension_regex.captures_iter(&fragment) { + for cap in extension_regex.captures_iter(&input) { let path = wix_toolset_path.join(format!("Wix{}.dll", &cap[1])); if settings.windows().can_sign() { try_sign(&path, settings)?; } extensions.push(path); } - candle_inputs.push((fragment_path, extensions)); + candle_inputs.push((input_path, extensions)); } let mut fragment_extensions = HashSet::new();