J'ai essayé beaucoup de choses différentes, de l'écriture d'un script vbs comme suggéré à un programme autonome appelé hstart. hstart a fonctionné ... mais cela crée un processus séparé que je n'aimais pas beaucoup parce que je ne peux pas le tuer normalement. Mais j'ai trouvé une solution plus simple qui nécessitait simplement le code Haskell.
Mon code d'avant était un simple appel à runCommand, qui faisait apparaître la fenêtre. Une autre fonction que vous pouvez utiliser est runProcess qui a plus d'options. De jeter un coup d'oeil au fichier de code source ghc runProcess.c, j'ai trouvé que l'indicateur CREATE_NO_WINDOW est défini lorsque vous fournissez des redirections pour tout STDIN, STOUT et STDERR. Donc, c'est ce que vous devez faire, fournir des redirections pour ceux. Mon programme de test ressemble à:
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)
Cela a fonctionné! Aucune fenêtre de commande à nouveau! Une mise en garde est que vous avez besoin d'un fichier vide pour inH à lire en tant que le STDIN même si dans ma situation, il n'était pas nécessaire.
Cette question devrait être rouverte, car il s'agit d'un "problème de programmation spécifique", spécifiquement comment démarrer un processus en arrière-plan à partir de Haskell. – Cirdec
Édité/reformulé dans l'espoir d'une réouverture. Je pense que c'est une question utile. Je pense aussi qu'il devrait être rouvert – Andre