Domanda

processi avviati tramite Process.Start sembra avere attorno a un 26 secondi di ritardo, quando il processo generato (il "bambino") lanci più nuovi processi (i "nipoti") - Sto cercando di trovare un modo per risolvere questo problema. In particolare, questo si verifica quando il processo originale (il "padre") è un sito ASP.Net o di un servizio di Windows (provato entrambi).

Si sta tentando di eseguire uno strumento da riga di comando sul lato server per raccogliere informazioni, le modifiche apportate in file system, e continuare con altri processi in cui il "bambino" è finito. Quando si crea il "bambino" direttamente tramite riga di comando, non v'è alcun ritardo, e con alcuni parametri della riga di comando, il "bambino" non nuovi processi non di spawn, e non v'è alcun ritardo. Tuttavia, con altri parametri, i "figli" Spawns "nipoti" (lo stesso eseguibile stesso, ma non possiamo modificare il suo codice) e sembra avere un ritardo di 25-30 secondi (solitamente 26 secondi) prima che il primo processo è iniziato, e poi corre normalmente.

Ho provato modificando la proprietà UseShellExecute, la proprietà CreateNoWindow, e la proprietà WindowStyle, senza alcun risultato. ErrorDialog e la RedirectStandard* proprietà sono false.

Il codice che sto utilizzando è il seguente:

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

Oh, io non credo che le questioni come ho visto la questione si fa riferimento altrove (ma nessuna soluzione), ma il Percorsoeseguibile sto usando punti di msysgit git.exe.

È stato utile?

Soluzione

Difficile raccontare una ragione per cui questo potrebbe accadere, è necessario fare ulteriori risoluzione dei problemi.

vorrei suggerire che si utilizza Process Explorer e Process Monitor per cercare potenziali problemi.

Direi che il problema non è direttamente nel codice, ma più legato all'ambiente dell'utente. Ad esempio, viene eseguito il processo w3wp.exe in una sessione non-GUI (sessione 0) e l'utente potrebbe non essere configurato per avere accesso al Web (configurazione proxy) in modo che si potrebbe vedere un problema di timeout qui.

Altri suggerimenti

Ho avuto questo stesso problema esatto esecuzione di un file .bat che a sua volta ha fatto una chiamata a git.cmd utilizzando Process.Start da un servizio di Windows. Il comando git sarebbe eseguire immediatamente se il file .bat è stato eseguito direttamente dalla linea di comando, ma ritarderebbe esattamente 50 secondi ogni momento è stato chiamato dal servizio di Windows.

E 'venuto giù ad un problema di autorizzazioni. Dopo aver configurato il mio servizio di Windows per l'esecuzione come un utente (amministratore nel mio caso), il processo di git corse immediatamente. Probabilmente si può modificare il vostro installatore di servizio per eseguire il servizio come "utente", ma si può solo modificare le proprietà del servizio dopo la sua installazione nello stesso senso.

Ci possono essere modi per attivare "Servizio locale" per aggirare il ritardo, ma non saprei come fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top