diff --git a/src/mkv/write.c b/src/mkv/write.c
index e35903e5d24e9669263545aa530566703002b57c..e652045a271980bfc5fb8b94d3816475eb9c24c1 100644
--- a/src/mkv/write.c
+++ b/src/mkv/write.c
@@ -104,28 +104,48 @@ int
 kara_metadata_write(struct kara_metadata *mdt, const char *filename)
 {
     char tmpfilepath[PATH_MAX];
-    char *const metadafilepath = &tmpfilepath[4];
     const char *args1[]        = { "mkvpropedit", "-t", "all:", filename, NULL };
     const char *args2[]        = { "mkvpropedit", "-t", tmpfilepath, filename, NULL };
-    int fd, sta = -1;
+    int sta = -1;
 
     memset(tmpfilepath, 0, PATH_MAX);
-    strncat(tmpfilepath, "all:/tmp/lektor.metadata.XXXXXX", PATH_MAX - 1);
 
+#if !(defined(LKT_OS_WIN) && (LKT_OS_WIN == 1))
+    char *const metadafilepath = &tmpfilepath[4];
+    strncat(tmpfilepath, "all:/tmp/lektor.metadata.XXXXXX", PATH_MAX - 1);
+    int fd;
     if ((fd = mkstemp(metadafilepath)) < 0) {
         LOG_ERROR("MKV", "Failed to create temporary file: %s", strerror(errno));
         goto error;
     }
-
-#if !(defined(LKT_OS_WIN) && (LKT_OS_WIN == 1))
-    // dprintf doesn't exist, used _get_osfhandle
     if (dprintf(fd, METADATA_TEMPLATE, mdt->source_name, mdt->song_name, mdt->category,
                 mdt->language, mdt->author_name, mdt->song_type, mdt->song_number) < 0) {
         LOG_ERROR("MKV", "Failed to write to temporary file: %s", metadafilepath);
         goto error;
     }
 #else
-    (void)mdt;
+    DWORD err = GetTempPathA(PATH_MAX, tmpfilepath);
+    if (err == 0 || err > MAX_PATH){
+        LOG_ERROR("MKV", "Failed to get tmp directory");
+        goto error;
+    }
+    FILE* handle;
+    char metadafilepath[PATH_MAX] = "lektor.metadata.XXXXXX";
+    if (_mktemp_s(metadafilepath, PATH_MAX))
+    {
+        LOG_ERROR("MKV", "Failed to create temporary filename");
+        goto error;
+    }
+    strncat(tmpfilepath, metadafilepath, PATH_MAX - 1);
+    if (fopen_s(&handle, tmpfilepath, "w")){
+        LOG_ERROR("MKV", "Failed to create temporary file %s", metadafilepath);
+        goto error;
+    }
+    if (fprintf(handle, METADATA_TEMPLATE, mdt->source_name, mdt->song_name, mdt->category,
+                mdt->language, mdt->author_name, mdt->song_type, mdt->song_number) < 0) {
+        LOG_ERROR("MKV", "Failed to write to temporary file: %s", metadafilepath);
+        goto error;
+    }
 #endif
 
     if (!mkvpropedit__(args1) || !mkvpropedit__(args2))
@@ -133,7 +153,11 @@ kara_metadata_write(struct kara_metadata *mdt, const char *filename)
 
     sta = 0;
 error:
+#if !(defined(LKT_OS_WIN) && (LKT_OS_WIN == 1))
     close(fd);
+#else
+    fclose(handle);
+#endif
     unlink(metadafilepath);
     return sta;
 }