Skip to content

System.Cmd.system fails on Win9x

Vivian McPhail
vivian.mcphail@paradise.net.nz

From a ghci session (6.4):

Prelude> System.Cmd.system "dir"
*** Exception: C:\WINDOWS\SYSTEM\CMD.EXE: runCommand:
does not exist (No such file or directory)

System.Cmd.system tries to run cmd.exe but on Win9x
this is command.com.

These executables are both mentioned in the
documentation so the distinction is not unknown.

I see that the source code for System.Process.Internals
has code for detecting this, but for some reason it
does not appear to be working:

-- Find CMD.EXE (or COMMAND.COM on Win98).  We use the
same algorithm as
-- system() in the VC++ CRT (Vc7/crt/src/system.c in a
VC++ installation).
findCommandInterpreter :: IO FilePath
findCommandInterpreter = do
  -- try COMSPEC first
  catchJust ioErrors (getEnv "COMSPEC") $ \e -> do
    when (not (isDoesNotExistError e)) $ ioError e

    -- try to find CMD.EXE or COMMAND.COM
    osver <- c_get_osver
    let filename | osver .&. 0x8000 /= 0 = "command.com"
		 | otherwise             = "cmd.exe"
    path <- getEnv "PATH"



Trac metadata
Trac field Value
Version 6.4
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution ResolvedFixed
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information