Gracias por las respuestas hasta ahora, pero he encontrado mi propia solución. Intenté muchas cosas diferentes, desde escribir un script vbs como se sugirió a un programa independiente llamado hstart. hstart funcionó ... pero crea un proceso separado que no me gustó mucho porque entonces no puedo matarlo de la manera normal. Pero encontré una solución más simple que requería simplemente el código Haskell.
Mi código de antes era una simple llamada a runCommand, que apareció en la ventana. Una función alternativa que puede usar es runProcess que tiene más opciones. Al leer detenidamente el archivo de código fuente de ghc runProcess.c, encontré que el indicador CREATE_NO_WINDOW se establece cuando se proporcionan redirecciones para STDIN, STOUT y STDERR. Entonces eso es lo que debes hacer, proporcionar redirecciones para esos. Mi programa de prueba se ve así:
import System.Process
import System.IO
main = do
inH <- openFile "in" ReadMode
outH <- openFile "out" WriteMode
runProcess "rsync.bat" [] Nothing Nothing (Just inH) (Just outH) (Just outH)
Esto funcionó! Sin ventana de comando otra vez! Una advertencia es que necesita un archivo vacío para que InH lo lea como STDIN aunque en mi situación no era necesario.
Esta pregunta debe volver a abrirse, ya que se trata de un "problema de programación específico", específicamente cómo iniciar un proceso en segundo plano de Haskell. – Cirdec
Editado/redactado de nuevo con la esperanza de volver a abrirlo. Creo que esta es una pregunta útil. Yo también creo que debería volver a abrirse – Andre