Frage

Prozesse über Process.Start gestartet scheinen eine 26-Sekunden-Verzögerung zu haben, um, wenn der erzeugte Prozess (das „Kind“) startet mehrere neue Prozesse (die „Enkel“) - Ich versuche, einen Weg zu finden, um dieses Problem zu lösen. Insbesondere das auftritt, wenn der ursprüngliche Prozess (die „Eltern“) ist eine ASP.Net Website oder ein Windows-Dienst (versuchte beides).

Wir versuchen ein serverseitigen Kommandozeilen-Tool laufen mit anderen Prozessen um Informationen zu sammeln, machen Änderungen im Dateisystem, und weiterhin, wenn das „Kind“ ist beendet. Wenn das „Kind“ creating direkt über die Kommandozeile gibt es keine Verzögerung, und mit bestimmten Befehlszeilenparametern, funktioniert das „Kind“ nicht laichen neue Verfahren, und es gibt keine Verzögerung. Jedoch mit anderen Parametern, die „Kind“ Spawn „Enkel“ (die gleiche ausführbare Datei als sich selbst, aber wir können ihren Code nicht ändern) und scheint eine 25-30 Sekunden (in der Regel 26 Sekunden) Verzögerung, bevor der erste Prozess ist gestartet, und dann läuft normal weiter.

Ich habe versucht, die UseShellExecute Eigenschaft ändern, die CreateNoWindow Eigenschaft und die WindowStyle Eigenschaft, keine Wirkung. ErrorDialog und die RedirectStandard* Eigenschaften sind falsch.

Der Code Ich verwende ist wie folgt:

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

Oh, ich glaube nicht, dass es wichtig ist, wie ich das Problem an anderer Stelle verweist gesehen habe (aber keine Lösungen), aber die ExePath Ich verwende Punkte msysgit des git.exe.

War es hilfreich?

Lösung

Hard einem Grund sagen, warum dies passieren könnte, müssen Sie weitere Informationen zur Fehlerbehebung tun.

Ich würde vorschlagen, dass Sie verwenden Process Explorer und Process Monitor für mögliche Probleme zu suchen.

Ich würde vermuten, dass das Problem nicht direkt im Code, sondern mehr auf die Umgebung des Benutzers verwendet. Zum Beispiel kann die w3wp.exe Prozess läuft in einer Nicht-GUI-Sitzung (Session 0) und der Benutzer kann nicht Web-Zugang zu haben (Proxy-Konfiguration) so konfiguriert werden, dass Sie hier ein Timeout Problem sehen könnten.

Andere Tipps

hatte ich das gleiche Problem genau eine BAT-Datei ausgeführt wird, die wiederum einen Aufruf an git.cmd Process.Start von einem Windows-Dienst. Der git Befehl würde sofort ausgeführt werden, wenn die .bat-Datei ist RAN direkt von der Kommandozeile, aber verzögern würde genau 50 Sekunden jederzeit aus dem Windows-Dienst aufgerufen wurde.

Es kam zu einem Berechtigungsproblem nach unten. meinen Windows-Dienstes nach der Konfiguration als Benutzer (Administrator in meinem Fall), der git Prozess lief sofort laufen. Sie können Ihren Dienst Installateur den Dienst als „User“, aber man kann einfach ändern, um die Service-Eigenschaften, nachdem es installiert ist, um den gleichen Effekt.

wahrscheinlich ändern laufen

kann es Möglichkeiten, zu ermöglichen „Service vor Ort“, um die Verzögerung zu umgehen, aber ich würde nicht wissen, wie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top