diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e9d498..70414b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -410,7 +410,6 @@ option(EXTENSION_STATIC_BUILD
         FALSE)
 
 if(WIN32 OR ZOS)
-  set(EXTENSION_STATIC_BUILD TRUE)
   add_definitions(-D_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1)
 endif()
 
@@ -857,6 +856,7 @@ if (NOT EXTENSION_CONFIG_BUILD AND NOT ${EXTENSION_TESTS_ONLY} AND NOT CLANG_TID
     message(STATUS "Extensions will be deployed to: ${LOCAL_EXTENSION_REPO_DIR}")
   endif()
 endif()
+set_target_properties(duckdb_local_extension_repo PROPERTIES EXCLUDE_FROM_ALL 1)
 
 function(build_loadable_extension_directory NAME ABI_TYPE OUTPUT_DIRECTORY EXTENSION_VERSION CAPI_VERSION PARAMETERS)
   set(TARGET_NAME ${NAME}_loadable_extension)
@@ -875,6 +875,8 @@ function(build_loadable_extension_directory NAME ABI_TYPE OUTPUT_DIRECTORY EXTEN
 
   if(EMSCRIPTEN)
      add_library(${TARGET_NAME} STATIC ${FILES})
+  elseif(WIN32)
+     add_library(${TARGET_NAME} MODULE ${FILES})
   else()
      add_library(${TARGET_NAME} SHARED ${FILES})
   endif()
diff --git a/DuckDBConfig.cmake.in b/DuckDBConfig.cmake.in
index 7c5ce31..bc4f40d 100644
--- a/DuckDBConfig.cmake.in
+++ b/DuckDBConfig.cmake.in
@@ -6,8 +6,24 @@
 
 include(CMakeFindDependencyMacro)
 find_dependency(Threads)
-if(NOT @WITH_INTERNAL_ICU@)
-    find_dependency(ICU COMPONENTS i18n uc data)
+if(NOT "@BUILD_SHARED_LIBS@")
+    set(z_vcpkg_duckdb_extensions_names "@DUCKDB_EXTENSION_NAMES@")
+    if("icu" IN_LIST z_vcpkg_duckdb_extensions_names AND NOT "@WITH_INTERNAL_ICU@")
+        find_dependency(ICU COMPONENTS i18n uc data)
+    endif()
+    if("excel" IN_LIST z_vcpkg_duckdb_extensions_names)
+        find_dependency(EXPAT)
+        find_dependency(ZLIB)
+        find_dependency(minizip-ng CONFIG)
+    endif()
+    if("httpfs" IN_LIST z_vcpkg_duckdb_extensions_names)
+        find_dependency(CURL)
+        find_dependency(OpenSSL)
+        if(MINGW)
+            find_dependency(ZLIB)
+        endif()
+    endif()
+    unset(z_vcpkg_duckdb_extensions_names)
 endif()
 
 # Compute paths
@@ -18,7 +34,7 @@ if(NOT TARGET duckdb AND NOT DuckDB_BINARY_DIR)
     include("${DuckDB_CMAKE_DIR}/DuckDBExports.cmake")
 endif()
 
-if(DuckDB_USE_STATIC_LIBS)
+if(NOT "@BUILD_SHARED_LIBS@")
     set(DuckDB_LIBRARIES duckdb_static)
 else()
     set(DuckDB_LIBRARIES duckdb)
diff --git a/extension/autocomplete/CMakeLists.txt b/extension/autocomplete/CMakeLists.txt
index 544e65a..a8e1e43 100644
--- a/extension/autocomplete/CMakeLists.txt
+++ b/extension/autocomplete/CMakeLists.txt
@@ -13,6 +13,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(autocomplete ${PARAMETERS}
                          ${AUTOCOMPLETE_EXTENSION_FILES})
 
+set_target_properties(autocomplete_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS autocomplete_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/core_functions/CMakeLists.txt b/extension/core_functions/CMakeLists.txt
index c97cd77..0827683 100644
--- a/extension/core_functions/CMakeLists.txt
+++ b/extension/core_functions/CMakeLists.txt
@@ -14,6 +14,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(core_functions ${PARAMETERS} ${CORE_FUNCTION_FILES})
 target_link_libraries(core_functions_loadable_extension duckdb_skiplistlib)
 
+set_target_properties(core_functions_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS core_functions_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/icu/CMakeLists.txt b/extension/icu/CMakeLists.txt
index a5bb58a..8edff2b 100644
--- a/extension/icu/CMakeLists.txt
+++ b/extension/icu/CMakeLists.txt
@@ -42,6 +42,11 @@ build_loadable_extension(icu ${PARAMETERS} ${ICU_EXTENSION_FILES})
 if(NOT WITH_INTERNAL_ICU)
   target_link_libraries(icu_loadable_extension ICU::i18n ICU::uc ICU::data)
 endif()
+
+set_target_properties(icu_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS icu_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/jemalloc/CMakeLists.txt b/extension/jemalloc/CMakeLists.txt
index 38be497..75cb8fb 100644
--- a/extension/jemalloc/CMakeLists.txt
+++ b/extension/jemalloc/CMakeLists.txt
@@ -12,6 +12,9 @@ set(JEMALLOC_EXTENSION_FILES jemalloc_extension.cpp ${JEMALLOC_OBJECT_FILES})
 build_static_extension(jemalloc ${JEMALLOC_EXTENSION_FILES})
 # we do not do build_loadable_extension here because jemalloc is static-only
 
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS jemalloc_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/json/CMakeLists.txt b/extension/json/CMakeLists.txt
index 80b4af4..81055de 100644
--- a/extension/json/CMakeLists.txt
+++ b/extension/json/CMakeLists.txt
@@ -41,6 +41,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(json ${PARAMETERS} ${JSON_EXTENSION_FILES})
 target_link_libraries(json_loadable_extension duckdb_yyjson)
 
+set_target_properties(json_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS json_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/parquet/CMakeLists.txt b/extension/parquet/CMakeLists.txt
index a8335d8..ef2ea3f 100644
--- a/extension/parquet/CMakeLists.txt
+++ b/extension/parquet/CMakeLists.txt
@@ -82,6 +82,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(parquet ${PARAMETERS} ${PARQUET_EXTENSION_FILES})
 target_link_libraries(parquet_loadable_extension duckdb_mbedtls duckdb_zstd)
 
+set_target_properties(parquet_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS parquet_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/tpcds/CMakeLists.txt b/extension/tpcds/CMakeLists.txt
index 6ec4cb8..db51141 100644
--- a/extension/tpcds/CMakeLists.txt
+++ b/extension/tpcds/CMakeLists.txt
@@ -11,6 +11,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(tpcds ${PARAMETERS} tpcds_extension.cpp
                          ${DSDGEN_OBJECT_FILES})
 
+set_target_properties(tpcds_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS tpcds_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/extension/tpch/CMakeLists.txt b/extension/tpch/CMakeLists.txt
index 46dcb12..46b9950 100644
--- a/extension/tpch/CMakeLists.txt
+++ b/extension/tpch/CMakeLists.txt
@@ -11,6 +11,10 @@ set(PARAMETERS "-warnings")
 build_loadable_extension(tpch ${PARAMETERS} tpch_extension.cpp
                          ${DBGEN_OBJECT_FILES})
 
+set_target_properties(tpch_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1)
+if(BUILD_SHARED_LIBS)
+  return()
+endif()
 install(
   TARGETS tpch_extension
   EXPORT "${DUCKDB_EXPORT_SET}"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1915e92..83da5f4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -172,8 +172,15 @@ else()
 
 endif()
 
+if(BUILD_SHARED_LIBS)
+  set(INSTALL_TARGET duckdb)
+  set_target_properties(duckdb_static PROPERTIES EXCLUDE_FROM_ALL 1)
+else()
+  set(INSTALL_TARGET duckdb_static)
+  set_target_properties(duckdb PROPERTIES EXCLUDE_FROM_ALL 1)
+endif()
 install(
-  TARGETS duckdb duckdb_static
+  TARGETS ${INSTALL_TARGET}
   EXPORT "${DUCKDB_EXPORT_SET}"
   LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
   ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
