diff --git a/.changes/dont-sign-non-binary-resources.md b/.changes/dont-sign-non-binary-resources.md new file mode 100644 index 000000000000..5220e40f753d --- /dev/null +++ b/.changes/dont-sign-non-binary-resources.md @@ -0,0 +1,5 @@ +--- +tauri-bundler: "patch:bug" +--- + +The bundler will no longer try to sign non-binary and already signed binary files on Windows diff --git a/crates/tauri-bundler/src/bundle/windows/msi/mod.rs b/crates/tauri-bundler/src/bundle/windows/msi/mod.rs index 22426f123e5d..9e59da3f4b05 100644 --- a/crates/tauri-bundler/src/bundle/windows/msi/mod.rs +++ b/crates/tauri-bundler/src/bundle/windows/msi/mod.rs @@ -7,7 +7,7 @@ use crate::{ bundle::{ settings::{Arch, Settings}, windows::{ - sign::try_sign, + sign::{should_sign, try_sign}, util::{ download_webview2_bootstrapper, download_webview2_offline_installer, WIX_OUTPUT_FOLDER_NAME, WIX_UPDATER_OUTPUT_FOLDER_NAME, @@ -988,7 +988,7 @@ fn generate_resource_data(settings: &Settings) -> crate::Result { } added_resources.push(resource_path.clone()); - if settings.can_sign() { + if settings.can_sign() && should_sign(&resource_path)? { try_sign(&resource_path, settings)?; } diff --git a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs index c4ca3f7fe3f1..3469f2b3a189 100644 --- a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs +++ b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs @@ -6,7 +6,7 @@ use crate::{ bundle::{ settings::Arch, windows::{ - sign::{sign_command, try_sign}, + sign::{should_sign, sign_command, try_sign}, util::{ download_webview2_bootstrapper, download_webview2_offline_installer, NSIS_OUTPUT_FOLDER_NAME, NSIS_UPDATER_OUTPUT_FOLDER_NAME, @@ -743,7 +743,7 @@ fn generate_resource_data(settings: &Settings) -> crate::Result { } added_resources.push(resource_path.clone()); - if settings.can_sign() { + if settings.can_sign() && should_sign(&resource_path)? { try_sign(&resource_path, settings)?; } diff --git a/crates/tauri-bundler/src/bundle/windows/sign.rs b/crates/tauri-bundler/src/bundle/windows/sign.rs index d24b9135b032..6d6798c4fe5f 100644 --- a/crates/tauri-bundler/src/bundle/windows/sign.rs +++ b/crates/tauri-bundler/src/bundle/windows/sign.rs @@ -257,3 +257,26 @@ pub fn try_sign>(file_path: P, settings: &Settings) -> crate::Res } Ok(()) } + +/// If the file is signable (is a binary file) and not signed already +/// (will skip the verification if not on Windows since we can't verify it) +pub fn should_sign(file_path: &Path) -> crate::Result { + let is_binary = file_path + .extension() + .and_then(|extension| extension.to_str()) + .is_some_and(|extension| matches!(extension, "exe" | "dll")); + if !is_binary { + return Ok(false); + } + + #[cfg(windows)] + { + let already_signed = verify(file_path)?; + Ok(!already_signed) + } + // Skip verification if not on Windows since we can't verify it + #[cfg(not(windows))] + { + Ok(true) + } +}