Waitforexit Access Is Denied


Tengo el código siguiente: Process. Kill está lanzando la excepción siguiente: El código trabaja generalmente, pero el tiempo impar él falla. Su parte de una acción personalizada en un instalador que he construido y cuando se ejecuta se ejecuta en la cuenta del sistema local. He visto esto suceder con Process. Kill en el pasado. Sé que hay algunas alternativas a la misma. No puedo modificar el código del proceso en cuestión por lo que estoy por mi cuenta para terminarlo sin embargo me parece adecuado. Cuál es el mejor método de nuking un proceso que necesita morir CUANTO ANTES si no cuido sobre el dejarlo en un cierto estado intermedio porque estoy desinstalando sus archivos del sistema Cualquier IO se debe permitir terminar o conseguir cancelado en caso de que cualquier ajuste está en El proceso de establecer la aplicación a nivel global y el usuario realiza una actualización. P / Invocando TerminateProcess será la mejor solución pedida Mar 16 15 at 18:38 sthotakura Sí, hago unas llamadas a Process. Kill para tratar de matar ese proceso, por lo que tiene sentido. Parece que el proceso no muere en absoluto. Inicialmente, llamé Process. Kill en él, luego nuevamente después de 5 segundos, luego nuevamente después de otros 5 segundos. Puedo matar el proceso bien ahora, y puedo matarlo ahora usando Process. Kill, pero durante ese período de tiempo particular no moriría a pesar de entrar en un estado terminado, casi como si la terminación fuera cancelada. Ndash Alexandru Mar 16 15 at 18:56 Parece que el problema fue en parte mi culpa. Algo mantuvo reiniciando el proceso pero no pude usar el método de GetProcesses () para enumerar y ver este cambio de procesos activos del lado del instalador de cosas porque (como resulta) no estaba funcionando bajo la cuenta del SISTEMA, sino debajo de otra cuenta , Y por alguna razón (que no puedo explicar TBH) ese método no me devolvió los procesos activos. Corrí mi acción personalizada utilizando SYSTEM configurando Executequotdeferredquot Impersonatequotnoquot y funcionó, y pude eliminar mi proceso una segunda vez después de que se había reiniciado. Ndash Alexandru Mar 16 15 a las 21:35 Intentando llamar a un ejecutable utilizando Process. Start y está lanzando una excepción Win32 sólo en máquinas con Windows XP. Se trata de una aplicación de consola instalada en la máquina. Heres un ejemplo del código: Heres el rastreo de pila: SystemponentModel. Win32Exception (0x80004005): Acceso denegado en System. Diagnostics. Process. StartWithShellExecuteEx (ProcessStartInfo startInfo) en System. Diagnostics. Process. Start () en System. Diagnostics. Process. Start (ProcessStartInfo startInfo) Cualquier persona tiene algún consejo sobre cómo hacer que esto funcione en las máquinas de Windows XP preguntó Feb 23 11 at 21: 58Soy una situación donde quiero ejecutar un archivo, y luego eliminar el archivo ejecutable cuando se realiza la ejecución. Utilizo System. Diagnostics. Process. Start () para ejecutar el archivo y utilizar. WaitForExit () para esperar a que se complete el proceso. A continuación, utilizar File. Delete (filename) para eliminar el archivo ejecutable. El problema es que a veces, File. Delete fallará con el siguiente error: Esto me lleva a creer que, de alguna manera, el proceso todavía está vivo y bloquear el archivo ejecutable incluso después de la llamada. WaitForExit () devuelve. He encontrado otros hilos en la red que describen el mismo comportamiento, pero no he encontrado ninguno que concluya con una explicación o solución razonable al problema, aparte de las sugerencias de colocar un Sleep (n) después de WaitForExit (). Ejemplos: Aquí hay un programa de ejemplo que reproduce el problema para mí. He probado en Windows XP y Windows 7, y ambos finalmente fallan en algún momento con el mismo error. También tenga en cuenta que el ejecutable ss. exe es una sencilla aplicación de consola quotHello Worldquot. Y la salida típicamente parece algo así (con una cantidad variable de iteraciones antes de que ocurra el fallo): Cualquier idea sobre por qué sucede esto, y si hay alguna solución para esto (aparte de poner duerme en el código) Friday, January 08, 2010 3 : 40 PM La razón es que aunque el proceso se completa, puede tomar unos milisegundos para que el sistema operativo termine de destruirlo. Es un sistema operativo multitarea después de todo, su tratando de servicio a todos al mismo tiempo. Infortunadamente, no hay manera de saber cuando el archivo ya no está bloqueado (presicely). Cuando se espera de WaitForExit, está creando un objeto de bloqueo en el objeto de proceso. El objeto del proceso no puede ser destruido hasta que se libere el bloqueo y no se puede esperar algo que no existe (tipo de huevo y pollo). Así que lo único razonable que puedes hacer es seguir intentándolo, algo como: Marcado como respuesta por Samuel Stanojevic Viernes, 08 de Enero de 2010 16:20 Editado por Tergiver viernes, 08 de enero de 2010 16:20 cambiado a bool, loop infinito Corrección Viernes, 08 de Enero de 2010 16:15 Microsoft está llevando a cabo una encuesta en línea para entender su opinión sobre el sitio web Msdn. Si decide participar, se le presentará la encuesta en línea cuando abandone el sitio Web de Msdn. Te gustaría participar

Comments