diff --git a/cabal-install/Distribution/Client/Sandbox.hs b/cabal-install/Distribution/Client/Sandbox.hs
index 21ba32734ec071d3129ad33800d31dabc480152e..52eecd132e96b86875a3965b3c4815a0672c5e8d 100644
--- a/cabal-install/Distribution/Client/Sandbox.hs
+++ b/cabal-install/Distribution/Client/Sandbox.hs
@@ -82,6 +82,7 @@ import Distribution.System                    ( Platform )
 import Distribution.Text                      ( display )
 import Distribution.Verbosity                 ( Verbosity, lessVerbose )
 import Distribution.Compat.Env                ( lookupEnv, setEnv )
+import Distribution.Compat.FilePerms          ( setFileHidden )
 import qualified Distribution.Client.Sandbox.Index as Index
 import qualified Distribution.Simple.Register      as Register
 import Control.Exception                      ( assert, bracket_ )
@@ -192,6 +193,7 @@ sandboxInit verbosity sandboxFlags globalFlags = do
                     (sandboxLocation sandboxFlags)
   createDirectoryIfMissingVerbose verbosity True sandboxDir'
   sandboxDir <- tryCanonicalizePath sandboxDir'
+  setFileHidden sandboxDir
   notice verbosity $ "Using a sandbox located at " ++ sandboxDir
 
   -- Determine which compiler to use (using the value from ~/.cabal/config).
diff --git a/cabal-install/Distribution/Compat/FilePerms.hs b/cabal-install/Distribution/Compat/FilePerms.hs
index 284f071df06325aabdf2f0a07d98572d95757609..1f8393f515903b7727512daecd7f1fdab3d2fca6 100644
--- a/cabal-install/Distribution/Compat/FilePerms.hs
+++ b/cabal-install/Distribution/Compat/FilePerms.hs
@@ -3,6 +3,7 @@
 module Distribution.Compat.FilePerms (
   setFileOrdinary,
   setFileExecutable,
+  setFileHidden,
   ) where
 
 #ifndef mingw32_HOST_OS
@@ -14,12 +15,15 @@ import Foreign.C
          ( withCString )
 import Foreign.C
          ( throwErrnoPathIfMinus1_ )
+#else
+import System.Win32.File (setFileAttributes, fILE_ATTRIBUTE_HIDDEN)
 #endif /* mingw32_HOST_OS */
 
-setFileOrdinary,  setFileExecutable  :: FilePath -> IO ()
+setFileHidden, setFileOrdinary,  setFileExecutable  :: FilePath -> IO ()
 #ifndef mingw32_HOST_OS
 setFileOrdinary   path = setFileMode path 0o644 -- file perms -rw-r--r--
 setFileExecutable path = setFileMode path 0o755 -- file perms -rwxr-xr-x
+setFileHidden     _    = return ()
 
 setFileMode :: FilePath -> FileMode -> IO ()
 setFileMode name m =
@@ -28,4 +32,5 @@ setFileMode name m =
 #else
 setFileOrdinary   _ = return ()
 setFileExecutable _ = return ()
+setFileHidden  path = setFileAttributes path fILE_ATTRIBUTE_HIDDEN
 #endif