diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp
index 2af740fe..ab0cd206 100644
--- a/src/windows-emulator/windows_emulator.cpp
+++ b/src/windows-emulator/windows_emulator.cpp
@@ -145,7 +145,7 @@ namespace
         return buffer;
     }
 
-    std::vector<uint8_t> obtain_api_set(apiset_location location)
+    std::vector<uint8_t> obtain_api_set(const apiset_location location, const std::filesystem::path& root)
     {
         switch (location)
         {
@@ -162,7 +162,7 @@ namespace
             throw std::runtime_error("The APISET host location is not supported on this platform");
 #endif
         case apiset_location::file: {
-            auto apiset = utils::io::read_file("api-set.bin");
+            auto apiset = utils::io::read_file(root / "api-set.bin");
             if (apiset.empty())
                 throw std::runtime_error("Failed to read file api-set.bin");
             return decompress_apiset(apiset);
@@ -181,10 +181,11 @@ namespace
     }
 
     emulator_object<API_SET_NAMESPACE> build_api_set_map(x64_emulator& emu, emulator_allocator& allocator,
-                                                         apiset_location location = apiset_location::host)
+                                                         const apiset_location location = apiset_location::host,
+                                                         const std::filesystem::path& root = {})
     {
         return clone_api_set_map(emu, allocator,
-                                 reinterpret_cast<const API_SET_NAMESPACE&>(*obtain_api_set(location).data()));
+                                 reinterpret_cast<const API_SET_NAMESPACE&>(*obtain_api_set(location, root).data()));
     }
 
     emulator_allocator create_allocator(emulator& emu, const size_t size)
@@ -277,17 +278,13 @@ namespace
             proc_params.MaximumLength = proc_params.Length;
         });
 
-// TODO: make this configurable
-#ifdef OS_WINDOWS
-        apiset_location apiset_loc = apiset_location::host;
-#else
-        apiset_location apiset_loc = apiset_location::default_windows_11;
-#endif
+        // TODO: make this configurable
+        const apiset_location apiset_loc = apiset_location::file;
 
         context.peb.access([&](PEB64& peb) {
             peb.ImageBaseAddress = nullptr;
             peb.ProcessParameters = context.process_params.ptr();
-            peb.ApiSetMap = build_api_set_map(emu, allocator, apiset_loc).ptr();
+            peb.ApiSetMap = build_api_set_map(emu, allocator, apiset_loc, win_emu.root_directory).ptr();
 
             peb.ProcessHeap = nullptr;
             peb.ProcessHeaps = nullptr;