diff --git a/src/common/settings.h b/src/common/settings.h
index 851812f28b..d2452c93bb 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -531,6 +531,7 @@ struct Values {
     Setting<bool> use_auto_stub{false, "use_auto_stub"};
     Setting<bool> enable_all_controllers{false, "enable_all_controllers"};
     Setting<bool> create_crash_dumps{false, "create_crash_dumps"};
+    Setting<bool> perform_vulkan_check{true, "perform_vulkan_check"};
 
     // Miscellaneous
     Setting<std::string> log_filter{"*:Info", "log_filter"};
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index a4ed684229..195074bf25 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -546,6 +546,7 @@ void Config::ReadDebuggingValues() {
     ReadBasicSetting(Settings::values.use_auto_stub);
     ReadBasicSetting(Settings::values.enable_all_controllers);
     ReadBasicSetting(Settings::values.create_crash_dumps);
+    ReadBasicSetting(Settings::values.perform_vulkan_check);
 
     qt_config->endGroup();
 }
@@ -1162,6 +1163,7 @@ void Config::SaveDebuggingValues() {
     WriteBasicSetting(Settings::values.disable_macro_jit);
     WriteBasicSetting(Settings::values.enable_all_controllers);
     WriteBasicSetting(Settings::values.create_crash_dumps);
+    WriteBasicSetting(Settings::values.perform_vulkan_check);
 
     qt_config->endGroup();
 }
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index 622808e944..dacc75a20f 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -77,6 +77,7 @@ void ConfigureDebug::SetConfiguration() {
     ui->disable_loop_safety_checks->setChecked(
         Settings::values.disable_shader_loop_safety_checks.GetValue());
     ui->extended_logging->setChecked(Settings::values.extended_logging.GetValue());
+    ui->perform_vulkan_check->setChecked(Settings::values.perform_vulkan_check.GetValue());
 
 #ifdef YUZU_USE_QT_WEB_ENGINE
     ui->disable_web_applet->setChecked(UISettings::values.disable_web_applet.GetValue());
@@ -117,6 +118,7 @@ void ConfigureDebug::ApplyConfiguration() {
         ui->disable_loop_safety_checks->isChecked();
     Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked();
     Settings::values.extended_logging = ui->extended_logging->isChecked();
+    Settings::values.perform_vulkan_check = ui->perform_vulkan_check->isChecked();
     UISettings::values.disable_web_applet = ui->disable_web_applet->isChecked();
     Debugger::ToggleConsole();
     Common::Log::Filter filter;
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui
index 314d47af5c..102c8c66ce 100644
--- a/src/yuzu/configuration/configure_debug.ui
+++ b/src/yuzu/configuration/configure_debug.ui
@@ -313,6 +313,16 @@
         </property>
        </widget>
       </item>
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="perform_vulkan_check">
+        <property name="toolTip">
+         <string>Enables yuzu to check for a working Vulkan environment when the program starts up. Disable this if this is causing issues with external programs seeing yuzu.</string>
+        </property>
+        <property name="text">
+         <string>Perform Startup Vulkan Check</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 3c1bd19db6..23245a976d 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -4086,7 +4086,8 @@ int main(int argc, char* argv[]) {
     }
 #endif
 
-    if (StartupChecks(argv[0], &has_broken_vulkan)) {
+    if (StartupChecks(argv[0], &has_broken_vulkan,
+                      Settings::values.perform_vulkan_check.GetValue())) {
         return 0;
     }
 
diff --git a/src/yuzu/startup_checks.cpp b/src/yuzu/startup_checks.cpp
index 29b87da051..fc2693f9d7 100644
--- a/src/yuzu/startup_checks.cpp
+++ b/src/yuzu/startup_checks.cpp
@@ -57,7 +57,7 @@ bool CheckEnvVars(bool* is_child) {
     return false;
 }
 
-bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
+bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulkan_check) {
 #ifdef _WIN32
     // Set the startup variable for child processes
     const bool env_var_set = SetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, ENV_VAR_ENABLED_TEXT);
@@ -67,29 +67,32 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
         return false;
     }
 
-    PROCESS_INFORMATION process_info;
-    std::memset(&process_info, '\0', sizeof(process_info));
+    if (perform_vulkan_check) {
+        // Spawn child process that performs Vulkan check
+        PROCESS_INFORMATION process_info;
+        std::memset(&process_info, '\0', sizeof(process_info));
 
-    if (!SpawnChild(arg0, &process_info, 0)) {
-        return false;
-    }
+        if (!SpawnChild(arg0, &process_info, 0)) {
+            return false;
+        }
 
-    // Wait until the processs exits and get exit code from it
-    WaitForSingleObject(process_info.hProcess, INFINITE);
-    DWORD exit_code = STILL_ACTIVE;
-    const int err = GetExitCodeProcess(process_info.hProcess, &exit_code);
-    if (err == 0) {
-        std::fprintf(stderr, "GetExitCodeProcess failed with error %d\n", GetLastError());
-    }
+        // Wait until the processs exits and get exit code from it
+        WaitForSingleObject(process_info.hProcess, INFINITE);
+        DWORD exit_code = STILL_ACTIVE;
+        const int err = GetExitCodeProcess(process_info.hProcess, &exit_code);
+        if (err == 0) {
+            std::fprintf(stderr, "GetExitCodeProcess failed with error %d\n", GetLastError());
+        }
 
-    // Vulkan is broken if the child crashed (return value is not zero)
-    *has_broken_vulkan = (exit_code != 0);
+        // Vulkan is broken if the child crashed (return value is not zero)
+        *has_broken_vulkan = (exit_code != 0);
 
-    if (CloseHandle(process_info.hProcess) == 0) {
-        std::fprintf(stderr, "CloseHandle failed with error %d\n", GetLastError());
-    }
-    if (CloseHandle(process_info.hThread) == 0) {
-        std::fprintf(stderr, "CloseHandle failed with error %d\n", GetLastError());
+        if (CloseHandle(process_info.hProcess) == 0) {
+            std::fprintf(stderr, "CloseHandle failed with error %d\n", GetLastError());
+        }
+        if (CloseHandle(process_info.hThread) == 0) {
+            std::fprintf(stderr, "CloseHandle failed with error %d\n", GetLastError());
+        }
     }
 
     if (!SetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, nullptr)) {
@@ -98,26 +101,28 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
     }
 
 #elif defined(YUZU_UNIX)
-    const pid_t pid = fork();
-    if (pid == 0) {
-        CheckVulkan();
-        return true;
-    } else if (pid == -1) {
-        const int err = errno;
-        std::fprintf(stderr, "fork failed with error %d\n", err);
-        return false;
-    }
+    if (perform_vulkan_check) {
+        const pid_t pid = fork();
+        if (pid == 0) {
+            CheckVulkan();
+            return true;
+        } else if (pid == -1) {
+            const int err = errno;
+            std::fprintf(stderr, "fork failed with error %d\n", err);
+            return false;
+        }
 
-    // Get exit code from child process
-    int status;
-    const int r_val = wait(&status);
-    if (r_val == -1) {
-        const int err = errno;
-        std::fprintf(stderr, "wait failed with error %d\n", err);
-        return false;
+        // Get exit code from child process
+        int status;
+        const int r_val = wait(&status);
+        if (r_val == -1) {
+            const int err = errno;
+            std::fprintf(stderr, "wait failed with error %d\n", err);
+            return false;
+        }
+        // Vulkan is broken if the child crashed (return value is not zero)
+        *has_broken_vulkan = (status != 0);
     }
-    // Vulkan is broken if the child crashed (return value is not zero)
-    *has_broken_vulkan = (status != 0);
 #endif
     return false;
 }
diff --git a/src/yuzu/startup_checks.h b/src/yuzu/startup_checks.h
index f2fc2d9d45..d8e563be63 100644
--- a/src/yuzu/startup_checks.h
+++ b/src/yuzu/startup_checks.h
@@ -13,7 +13,7 @@ constexpr char ENV_VAR_ENABLED_TEXT[] = "ON";
 
 void CheckVulkan();
 bool CheckEnvVars(bool* is_child);
-bool StartupChecks(const char* arg0, bool* has_broken_vulkan);
+bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulkan_check);
 
 #ifdef _WIN32
 bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags);