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();