diff --git a/src/target.rs b/src/target.rs
index ac6b6be9..1ce8d308 100644
--- a/src/target.rs
+++ b/src/target.rs
@@ -32,6 +32,11 @@ pub async fn detect_targets() -> Vec<String> {
             v.push(macos::X86.into());
         }
 
+        #[cfg(target_os = "windows")]
+        if v[0].contains("gnu") {
+            v.push(v[0].replace("gnu", "msvc"));
+        }
+
         v
     } else {
         #[cfg(target_os = "linux")]
@@ -42,7 +47,11 @@ pub async fn detect_targets() -> Vec<String> {
         {
             macos::detect_targets_macos()
         }
-        #[cfg(not(any(target_os = "linux", target_os = "macos")))]
+        #[cfg(target_os = "windows")]
+        {
+            windows::detect_targets_windows()
+        }
+        #[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
         {
             vec![TARGET.into()]
         }
@@ -145,3 +154,19 @@ mod macos {
         }
     }
 }
+
+#[cfg(target_os = "windows")]
+mod windows {
+    use super::TARGET;
+    use guess_host_triple::guess_host_triple;
+
+    pub(super) fn detect_targets_windows() -> Vec<String> {
+        let mut targets = vec![guess_host_triple().unwrap_or(TARGET).to_string()];
+
+        if targets[0].contains("gnu") {
+            targets.push(targets[0].replace("gnu", "msvc"));
+        }
+
+        targets
+    }
+}