Question

Les processus lancés par Process.Start semble avoir autour d'un 26 secondes de retard lorsque le processus donné naissance (le « enfant ») lance des processus plus nouveaux (les « petits-enfants ») - Je suis en train de trouver un moyen de résoudre ce problème. Plus précisément, ce phénomène se produit lorsque le processus d'origine (le « parent ») est un site ASP.Net ou un service Windows (essayé les deux).

Nous vous essayez d'exécuter un outil de ligne de commande côté serveur pour recueillir des informations, apporter des modifications dans le système de fichiers, et continuer avec d'autres processus lorsque le « enfant » est terminé. Lors de la création du « enfant » directement via la ligne de commande, il n'y a pas de retard, et certains paramètres de ligne de commande, le « enfant » de nouveaux processus ne peut pas se reproduire, et il n'y a pas de retard. Cependant, avec d'autres paramètres, les « enfants » pontes « petits-enfants » (le même exécutable que lui-même, mais nous ne pouvons pas modifier son code) et semble avoir un retard de 25-30 secondes (habituellement 26 secondes) avant le premier processus est commencé, puis fonctionne normalement.

J'ai essayé de modifier la propriété UseShellExecute, la propriété CreateNoWindow et la propriété WindowStyle, sans effet. ErrorDialog et les propriétés RedirectStandard* sont fausses.

Le code que je utilise est comme suit:

using (Process p = new Process())
{
    p.StartInfo = new ProcessStartInfo(exePath, args)
    {
        WorkingDirectory = workingDirectory,
        UseShellExecute = true,
        CreateNoWindow = true,
    };
    p.Start();
    p.WaitForExit();
}

Oh, je ne pense pas qu'il importe comme je l'ai vu la question référencée ailleurs (mais pas de solutions), mais le ExePath j'utilise des points à git.exe de msysgit.

Était-ce utile?

La solution

Difficile à dire une raison pour laquelle cela pourrait se produire, vous devez faire un dépannage plus approfondi.

Je suggère que vous utilisez Process Explorer et Process Monitor à rechercher des problèmes potentiels.

Je suppose que le problème ne soit pas directement dans votre code, mais plus liée à l'environnement de l'utilisateur. Par exemple, les pistes de processus w3wp.exe dans une session non-GUI (séance 0) et l'utilisateur peut ne pas être configuré pour avoir accès au Web (configuration proxy) afin que vous puissiez voir un problème de délai d'attente ici.

Autres conseils

J'ai eu ce même problème d'exécuter un fichier .bat qui à son tour fait un appel à l'aide git.cmd Process.Start à partir d'un service Windows. La commande git serait exécuter immédiatement si le fichier .bat a été exécuté directement à partir de la ligne de commande, mais retarderait exactement 50 secondes à chaque fois qu'il a été appelé du service Windows.

Il est descendu à un problème d'autorisations. Après avoir configuré mon service Windows pour exécuter en tant qu'utilisateur (administrateur dans mon cas), le processus git couru immédiatement. Vous pouvez probablement modifier votre installateur de service pour exécuter le service comme « utilisateur », mais vous pouvez simplement modifier les propriétés du service après qu'il est installé dans le même sens.

Il peut y avoir des moyens d'activer le « Service local » pour contourner le retard, mais je ne sais pas comment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top