Pregunta

Los procesos lanzados a través de Process.Start parece tener alrededor de un 26 segundos de retraso cuando el proceso creado (el "niño") lanzamientos más nuevos procesos (los "nietos") - Estoy tratando de encontrar una manera de resolver este problema. En concreto, esto ocurre cuando el proceso original (el "padre") es un sitio web ASP.Net o un servicio de Windows (probado ambos).

Estamos tratando de ejecutar una herramienta de línea de comandos del lado del servidor para recopilar información, modificaciones realice en el sistema de archivos, y continuar con otros procesos cuando se termina el "niño". Al crear el "niño" directamente a través de línea de comandos, no hay ningún retraso, y con ciertos parámetros de línea de comandos, el "niño" hace nuevos procesos de regeneración no, y no hay ningún retraso. Sin embargo, con otros parámetros, los "niños" de desoves "nietos" (el mismo ejecutable que sí, pero no podemos modificar su código) y parece que tienen un retraso de 25-30 segundos (generalmente 26 segundos) antes de que el primer proceso es comenzado, y después funciona con normalidad.

He intentado modificar la propiedad UseShellExecute, la propiedad CreateNoWindow, y la propiedad WindowStyle, a ningún efecto. ErrorDialog y la RedirectStandard* propiedades son falsas.

El código que estoy usando es el siguiente:

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

Oh, no creo que importe lo que he visto el problema que se hace referencia en otra parte (pero no soluciones), pero el ExePath estoy usando puntos a git.exe msysgit de.

¿Fue útil?

Solución

Es difícil hablar de una razón por la que esto podría ocurrir, lo que necesita hacer la solución de problemas.

Yo sugeriría que utiliza el proceso de Explorer y el monitor de procesos para identificar problemas potenciales.

Me imagino que el problema no es directamente en el código pero más relacionado con el entorno del usuario. Por ejemplo, se ejecuta el proceso w3wp.exe en una sesión no GUI (sesión 0) y el usuario no esté configurado para tener acceso a la red (configuración de proxy) de modo que es posible que aparezca un problema de tiempo de espera aquí.

Otros consejos

Tuve este mismo problema exacto ejecutar un archivo .bat que a su vez hizo una llamada a git.cmd usando Process.Start de un servicio de Windows. El comando git ejecutaría inmediatamente si el archivo .bat se corrió directamente desde la línea de comandos, pero retrasaría exactamente 50 segundos en cualquier momento se le llamó desde el servicio de ventanas.

Se redujo a un problema de permisos. Después de configurar mi servicio de Windows para ejecutarse como un usuario (administrador en mi caso), el proceso de git corrió inmediatamente. Es probable que pueda modificar su instalador servicio para ejecutar el servicio como "Usuario", pero sólo puede modificar las propiedades del servicio después de su instalación en el mismo sentido.

Existen muchas maneras de activar el "Servicio Local" para moverse por la demora, pero no sabría cómo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top