diff --git a/.changes/vc-redistributable.md b/.changes/vc-redistributable.md new file mode 100644 index 000000000..398606c23 --- /dev/null +++ b/.changes/vc-redistributable.md @@ -0,0 +1,5 @@ +--- +"tauri-bundler": patch +--- + +Bundle Visual C++ redistributable files with VC142_CRT merge modules. diff --git a/cli/core/src/MergeModules/Microsoft_VC142_CRT_x64.msm b/cli/core/src/MergeModules/Microsoft_VC142_CRT_x64.msm new file mode 100644 index 000000000..0681b2680 Binary files /dev/null and b/cli/core/src/MergeModules/Microsoft_VC142_CRT_x64.msm differ diff --git a/cli/core/src/MergeModules/Microsoft_VC142_CRT_x86.msm b/cli/core/src/MergeModules/Microsoft_VC142_CRT_x86.msm new file mode 100644 index 000000000..b65780f05 Binary files /dev/null and b/cli/core/src/MergeModules/Microsoft_VC142_CRT_x86.msm differ diff --git a/cli/core/src/build.rs b/cli/core/src/build.rs index 7328b1585..b40ae4461 100644 --- a/cli/core/src/build.rs +++ b/cli/core/src/build.rs @@ -100,6 +100,26 @@ impl Build { if config_.tauri.bundle.active { let bundler_settings = rust::get_bundler_settings(&config_, self.debug)?; + // move merge modules to the out dir so the bundler can load it + #[cfg(windows)] + { + let (filename, vcruntime_msm) = if cfg!(target_arch = "x86") { + let _ = + std::fs::remove_file(bundler_settings.out_dir.join("Microsoft_VC142_CRT_x64.msm")); + ( + "Microsoft_VC142_CRT_x86.msm", + include_bytes!("./MergeModules/Microsoft_VC142_CRT_x86.msm").to_vec(), + ) + } else { + let _ = + std::fs::remove_file(bundler_settings.out_dir.join("Microsoft_VC142_CRT_x86.msm")); + ( + "Microsoft_VC142_CRT_x64.msm", + include_bytes!("./MergeModules/Microsoft_VC142_CRT_x64.msm").to_vec(), + ) + }; + std::fs::write(bundler_settings.out_dir.join(filename), vcruntime_msm)?; + } let mut settings_builder = SettingsBuilder::new() .package_settings(bundler_settings.package_settings) .bundle_settings(bundler_settings.bundle_settings) diff --git a/cli/tauri-bundler/src/bundle/templates/main.wxs b/cli/tauri-bundler/src/bundle/templates/main.wxs index 8eb73c349..c804e9142 100644 --- a/cli/tauri-bundler/src/bundle/templates/main.wxs +++ b/cli/tauri-bundler/src/bundle/templates/main.wxs @@ -112,6 +112,16 @@ + {{#each merge_modules as |msm| ~}} + + + + + + + + {{/each~}} + crate::Result> { Ok(binaries) } +#[derive(Serialize)] +struct MergeModule { + name: String, + path: String, +} + +fn get_merge_modules(settings: &Settings) -> crate::Result> { + let mut merge_modules = Vec::new(); + let regex = Regex::new(r"[^\w\d\.]")?; + for msm in glob::glob( + settings + .project_out_directory() + .join("*.msm") + .to_string_lossy() + .to_string() + .as_str(), + )? { + let path = msm?; + let filename = path + .file_name() + .expect("failed to extract merge module filename") + .to_os_string() + .into_string() + .expect("failed to convert merge module filename to string"); + merge_modules.push(MergeModule { + name: regex.replace_all(&filename, "").to_string(), + path: path.to_string_lossy().to_string(), + }); + } + Ok(merge_modules) +} + /// Generates the data required for the resource bundling on wix fn generate_resource_data(settings: &Settings) -> crate::Result { let mut resources = ResourceMap::new();