Je souhaite créer une application de journalisation générique (Windows), qui doit être capable d'exécuter un exécutable arbitraire en tant que processus enfant et de consigner les flux standards complets d'un fichier spécifique à un fichier (stdin, stdout, stderr). En outre, cette application de journalisation doit agir comme une sorte d'application "Man-in-the-Middle" complètement transparente, de sorte que pour l'utilisateur qui appelle l'exécutable original ou l'application de journalisation de l'emballage, il n'y a pas différence. Cette fonctionnalité est en quelque sorte similaire à l'outil de ligne de commande UNIX "tee", mais pour autant que je sache, cet outil ne peut malheureusement pas enregistrer aussi le stdin (seuls stdout et stderr sont supportés). En outre, je souhaite enregistrer d'autres informations, par ex. qui était le processus parent appelant, timestamps ...Journalisation transparente des flux standard de processus enfant (Windows)
Je veux utiliser cela en particulier pour l'invite de commande: "cmd.exe" et renommez l'original et le remplacer par mon propre "cmd.exe" pour obtenir automatiquement un fichier historique de toutes les commandes entrées (stdin), avec ses sorties (stdout, stderr).
Est-ce que quelqu'un a une bonne idée de comment réaliser cela facilement, peut-être avec du C# et des tuyaux?
Cordialement, Andreas
Il n'y a pas de solution facile. Les processus peuvent faire la différence entre une poignée de tuyau et une poignée de console et, dans la plupart des cas, se comportent différemment. –
@HarryJohnston ne devrait-il pas être dans de rares cas? La plupart des applications de console utilisent probablement cout/printf et ne se soucient pas de l'autre extrémité. Les applications interactives sont une histoire différente bien sûr, mais elles sont en minorité? – Anders
@Anders, malheureusement, 'cout' et' printf' sont des exemples de fonctions qui se comportent différemment pour un pipe (sortie tamponnée par défaut) que pour un handle de console (sortie unbuffered par défaut). –