que tienen un servicio de Windows que contiene este código:¿Por qué Process.WaitForExit arroja una excepción de "no proceso" incluso cuando existe un proceso?
public static void ExtractTextInner(string source, string destination)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = EXTRACTOR_EXE_FILEPATH
startInfo.Arguments = "\"" + source + "\" \"" + destination + "\"";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
int exitCode = process.ExitCode;
process.Close();
if (exitCode != 0)
{
switch (exitCode)
{
case 1:
throw new ApplicationException("IFilter Extraction Failed");
default:
throw new ApplicationException("Unknown Exit Code:" + exitCode.ToString());
}
}
}
El propósito de este código se ejecuta un extracto IFilter en un documento, usamos un proceso separado debido a que algunos IFilters son notoriamente escamosa.
Ahora este código funciona perfectamente bien en los cuadros de Windows 7 y Server 2008 R2, pero en un Windows Server 2003 el WaitForExit
lanza inmediatamente una excepción "No hay proceso asociado con este objeto de proceso". El proceso existe y completa su tarea sin problemas.
¿Alguien ha visto esto? ¿Alguien puede arrojar alguna luz sobre por qué WaitForExit daría este error?
Información adicional
Si coloco el código en una aplicación de consola y ejecutarlo trabaja muy bien en el cuadro de Windws Server 2003, así, por lo que parece ser un problema específico de ejecutar este en un servicio en un cuadro de Windows Server 2003.
Eso es muy difícil de explicar con este código. Tinker con la configuración del servicio. Asegúrese de que la opción "interactuar con el escritorio" esté desactivada. Publique todo lo que encuentre en el registro de eventos de la aplicación. –
El error ocurre cuando no se obtiene un MANIJA para el proceso (por lo tanto, no puedo esperar). Asegúrese de especificar UseShellExecute = false, para evitar reutilizar un proceso. También puede describir la bitness 32 vs 64 del servicio vs. el ejecutable? Por último, pruebe Process Monitor y vea lo que está sucediendo. – Ben
@Hans: no aparece nada en ninguno de los registros de eventos (al menos nada que mi código no incluya deliberadamente).No estoy seguro de dónde encontrar la opción "interactuar con el escritorio"? – AnthonyWJones