diff --git a/src/main/cpp/util/file_windows.cc b/src/main/cpp/util/file_windows.cc
index 608ed99..1eef9fc 100644
--- a/src/main/cpp/util/file_windows.cc
+++ b/src/main/cpp/util/file_windows.cc
@@ -139,15 +139,22 @@
 
 class MsysRoot {
  public:
-  MsysRoot() : data_(Get()) {}
-  bool IsValid() const { return data_.first; }
-  const string& GetPath() const { return data_.second; }
+  static bool IsValid() { return instance_.data_.first; }
+  static const string& GetPath() { return instance_.data_.second; }
+  static void ReInitForTesting() { instance_.data_ = Get(); }
 
  private:
-  const std::pair<bool, string> data_;
+  std::pair<bool, string> data_;
+  static MsysRoot instance_;
+
   static std::pair<bool, string> Get();
+  MsysRoot() : data_(Get()) {}
 };
 
+MsysRoot MsysRoot::instance_;
+
+void ReinitMsysRootForTesting() { MsysRoot::ReInitForTesting(); }
+
 std::pair<bool, string> MsysRoot::Get() {
   string result;
   char value[MAX_PATH];
@@ -165,6 +172,8 @@
     result = value2;
   }
 
+  ToLower(&result);
+
   // BAZEL_SH is usually "c:\tools\msys64\usr\bin\bash.exe", we need to return
   // "c:\tools\msys64". Look for the rightmost msys-looking component.
   while (!IsRootDirectory(result) &&
@@ -200,15 +209,10 @@
     } else {
       // The path is a normal MSYS path e.g. "/usr". Prefix it with the MSYS
       // root.
-      // Define kMsysRoot only in this scope. This way we only initialize it
-      // and thus check for BAZEL_SH if we really need to, i.e. the caller
-      // passed an MSYS path and we have to convert it. If all paths ever passed
-      // are Windows paths, we don't need to check whether BAZEL_SH is defined.
-      static const MsysRoot kMsysRoot;
-      if (!kMsysRoot.IsValid()) {
+      if (!MsysRoot::IsValid()) {
         return false;
       }
-      mutable_path = JoinPath(kMsysRoot.GetPath(), path);
+      mutable_path = JoinPath(MsysRoot::GetPath(), path);
     }
   }  // otherwise this is a relative path, or absolute Windows path.
 
diff --git a/src/test/cpp/util/file_windows_test.cc b/src/test/cpp/util/file_windows_test.cc
index 231e21d..fe23a92 100644
--- a/src/test/cpp/util/file_windows_test.cc
+++ b/src/test/cpp/util/file_windows_test.cc
@@ -24,6 +24,8 @@
 
 namespace blaze_util {
 
+void ReinitMsysRootForTesting();  // defined in file_windows.cc
+
 TEST(FileTest, TestDirname) {
   ASSERT_EQ("", Dirname(""));
   ASSERT_EQ("/", Dirname("/"));
@@ -96,6 +98,7 @@
 
 TEST(FileTest, TestAsWindowsPath) {
   SetEnvironmentVariableA("BAZEL_SH", "c:\\msys\\some\\long\\path\\bash.exe");
+  ReinitMsysRootForTesting();
   std::wstring actual;
 
   ASSERT_TRUE(AsWindowsPath("", &actual));
@@ -134,4 +137,25 @@
   ASSERT_EQ(wlongpath, actual);
 }
 
+TEST(FileTest, TestMsysRootRetrieval) {
+  std::wstring actual;
+
+  SetEnvironmentVariableA("BAZEL_SH", "c:/foo/msys/bar/qux.exe");
+  ReinitMsysRootForTesting();
+  ASSERT_TRUE(AsWindowsPath("/blah", &actual));
+  ASSERT_EQ(std::wstring(L"c:\\foo\\msys\\blah"), actual);
+
+  SetEnvironmentVariableA("BAZEL_SH", "c:/foo/MSYS64/bar/qux.exe");
+  ReinitMsysRootForTesting();
+  ASSERT_TRUE(AsWindowsPath("/blah", &actual));
+  ASSERT_EQ(std::wstring(L"c:\\foo\\msys64\\blah"), actual);
+
+  SetEnvironmentVariableA("BAZEL_SH", "c:/qux.exe");
+  ReinitMsysRootForTesting();
+  ASSERT_FALSE(AsWindowsPath("/blah", &actual));
+
+  SetEnvironmentVariableA("BAZEL_SH", nullptr);
+  ReinitMsysRootForTesting();
+}
+
 }  // namespace blaze_util
