diff --git a/src/test/py/bazel/test_wrapper_test.py b/src/test/py/bazel/test_wrapper_test.py
index e93c7a9..f2f740e 100644
--- a/src/test/py/bazel/test_wrapper_test.py
+++ b/src/test/py/bazel/test_wrapper_test.py
@@ -82,6 +82,12 @@
         '        "@echo BAD=%TEST_UNDECLARED_OUTPUTS_MANIFEST%",',
         '    ],',
         ')',
+        'bat_test(',
+        '    name = "print_arg0_test",',
+        '    content = [',
+        '        "@echo ARG0=%0",',
+        '    ],',
+        ')',
         'exe_test(',
         '    name = "testargs_test",',
         '    src = "testargs.exe",',
@@ -385,6 +391,50 @@
     if not good or bad:
       self._FailWithOutput(stderr + stdout)
 
+  def _AssertTestBinaryLocation(self, flags):
+    exit_code, bazel_bin, stderr = self.RunBazel(['info', 'bazel-bin'])
+    self.AssertExitCode(exit_code, 0, stderr)
+    bazel_bin = bazel_bin[0].replace('/', '\\')
+
+    exit_code, stdout, stderr = self.RunBazel([
+        'test',
+        '//foo:print_arg0_test',
+        '--test_output=all',
+    ] + flags)
+    self.AssertExitCode(exit_code, 0, stderr)
+
+    arg0 = None
+    for line in stderr + stdout:
+      if line.startswith('ARG0='):
+        arg0 = line[len('ARG0='):]
+    # Get rid of the quotes if there is any
+    if arg0[0] == '"' and arg0[-1] == '"':
+      arg0 = arg0[1:-1]
+    # The test binary should located at the bazel bin folder
+    self.assertEqual(arg0, os.path.join(bazel_bin, 'foo\\print_arg0_test.bat'))
+
+    exit_code, stdout, stderr = self.RunBazel([
+        'test',
+        '//foo:print_arg0_test',
+        '--test_output=all',
+        '--enable_runfiles',
+    ] + flags)
+    self.AssertExitCode(exit_code, 0, stderr)
+
+    arg0 = None
+    for line in stderr + stdout:
+      if line.startswith('ARG0='):
+        arg0 = line[len('ARG0='):]
+    # Get rid of the quotes if there is any
+    if arg0[0] == '"' and arg0[-1] == '"':
+      arg0 = arg0[1:-1]
+    self.assertEqual(
+        arg0,
+        os.path.join(bazel_bin,
+                     'foo\\print_arg0_test.bat.runfiles\\'
+                     '__main__\\foo\\print_arg0_test.bat')
+    )
+
   def _AssertTestArgs(self, flags):
     exit_code, bazel_bin, stderr = self.RunBazel(['info', 'bazel-bin'])
     self.AssertExitCode(exit_code, 0, stderr)
@@ -617,6 +667,7 @@
     self._AssertRunfilesSymlinks(flags)
     self._AssertShardedTest(flags)
     self._AssertUnexportsEnvvars(flags)
+    self._AssertTestBinaryLocation(flags)
     self._AssertTestArgs(flags)
     self._AssertUndeclaredOutputs(flags)
     self._AssertUndeclaredOutputsAnnotations(flags)
diff --git a/tools/test/windows/tw.cc b/tools/test/windows/tw.cc
index 0a7862c..ac2ce57 100644
--- a/tools/test/windows/tw.cc
+++ b/tools/test/windows/tw.cc
@@ -1118,7 +1118,7 @@
 }
 
 bool FindTestBinary(const Path& argv0, const Path& cwd, std::wstring test_path,
-                    Path* result) {
+                    const Path& abs_test_srcdir, Path* result) {
   if (!blaze_util::IsAbsolute(test_path)) {
     std::string argv0_acp;
     if (!WcsToAcp(argv0.Get(), &argv0_acp)) {
@@ -1142,18 +1142,39 @@
 
     ComputeRunfilePath(workspace, &test_path);
 
-    std::string utf8_test_path;
-    uint32_t err;
-    if (!blaze_util::WcsToUtf8(test_path, &utf8_test_path, &err)) {
-      LogErrorWithArgAndValue(__LINE__, "Failed to convert string to UTF-8",
-                              test_path, err);
+    Path test_bin_in_runfiles;
+    if (!test_bin_in_runfiles.Set(abs_test_srcdir.Get() + L"\\" + test_path)) {
+      LogErrorWithArg2(__LINE__, "Could not join paths", abs_test_srcdir.Get(),
+                       test_path);
       return false;
     }
 
-    std::string rloc = runfiles->Rlocation(utf8_test_path);
-    if (!blaze_util::Utf8ToWcs(rloc, &test_path, &err)) {
-      LogErrorWithArgAndValue(__LINE__, "Failed to convert string",
-                              utf8_test_path, err);
+    std::wstring mf_only_str;
+    int mf_only_value = 0;
+    if (!GetIntEnv(L"RUNFILES_MANIFEST_ONLY", &mf_only_str, &mf_only_value)) {
+      return false;
+    }
+
+    // If runfiles is enabled on Windows, we use the test binary in the runfiles
+    // tree, which is consistent with the behavior on Linux and macOS.
+    // Otherwise, we use Rlocation function to find the actual test binary
+    // location.
+    if (mf_only_value != 1 && IsReadableFile(test_bin_in_runfiles)) {
+      test_path = test_bin_in_runfiles.Get();
+    } else {
+      std::string utf8_test_path;
+      uint32_t err;
+      if (!blaze_util::WcsToUtf8(test_path, &utf8_test_path, &err)) {
+        LogErrorWithArgAndValue(__LINE__, "Failed to convert string to UTF-8",
+                                test_path, err);
+        return false;
+      }
+
+      std::string rloc = runfiles->Rlocation(utf8_test_path);
+      if (!blaze_util::Utf8ToWcs(rloc, &test_path, &err)) {
+        LogErrorWithArgAndValue(__LINE__, "Failed to convert string",
+                                utf8_test_path, err);
+      }
     }
   }
 
@@ -1864,8 +1885,8 @@
   std::wstring args;
   if (!ParseArgs(argc, argv, &argv0, &test_path_arg, &args) ||
       !PrintTestLogStartMarker() || !GetCwd(&exec_root) ||
-      !FindTestBinary(argv0, exec_root, test_path_arg, &test_path) ||
       !ExportUserName() || !ExportSrcPath(exec_root, &srcdir) ||
+      !FindTestBinary(argv0, exec_root, test_path_arg, srcdir, &test_path) ||
       !ChdirToRunfiles(exec_root, srcdir) ||
       !ExportTmpPath(exec_root, &tmpdir) || !ExportHome(tmpdir) ||
       !ExportRunfiles(exec_root, srcdir) || !ExportShardStatusFile(exec_root) ||
