Título: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: scott_ en 8 Abril 2015, 09:07 am Muy buenas hermanos.
Como dice le titulo, ¿hay alguna funciona para que no se pueda finalizar un proceso? He estado invesigando pero no se si es correcto: Código: e.CloseReason = CloseReason.TaskManagerClosing Código: e.CloseReason = CloseReason.TaskManagerClosing OrElse e.CloseReason = CloseReason.WindowsShutDown Si alguien me explica estaría muy agradecido. Muchas Gracias por su tiempo y Saludos. Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: Eleкtro en 8 Abril 2015, 18:16 pm Buenas
¿hay alguna funciona para que no se pueda finalizar un proceso? No, no es posible, por motivos obvios de seguridad un proceso no puede evitar su terminación incondicional, pero al menos puedes controlar el cierre voluntario por parte del usuario. Aplicaciones cómo por ejemplo el Administrador de tareas (taskmgr) llaman a la función TerminateProcess para matar incondicionalmente un proceso, repito, incondicionalmente: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714.aspx?f=255&MSPPError=-2147217396 Dicha función no "pregunta" al proceso si puede ser cerrado y no necesita el permiso del proceso para cerrarlo, por algo puedes matar procesos que no estén respondiendo. He estado invesigando pero no se si es correcto: Código: e.CloseReason = CloseReason.TaskManagerClosing La propiedad e.CloseReason que has mostrado se usa en la plataforma .Net, ¿debemos suponer que estás intentando hacerlo en VB.Net o C#?, especifica que lenguaje utilizas al menos. CloseReason.TaskManagerClosing es simplemente un valor de una enumeración para determinar el motivo del cierre, nada más: https://msdn.microsoft.com/en-us/library/system.windows.forms.closereason.aspx?f=255&MSPPError=-2147217396 La ventana recibe el mensaje de windows WM_CLOSE (0x10) para solictar la terminación de la aplicación: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632617%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 Te muestro un ejemplo escrito en Vb.Net de cómo puedes interceptar el mensaje recibido y cancelarlo: Código
Pero eso solo sirve cuando "el usuario cierra la aplicación", el evento de cierre no se puede cancelar una vez que la terminación incondicional del proceso ha sido enviada, puedes comprobarlo tu mismo con el código de arriba y también con el siguiente código, verás que el código del interior del bloque de la condicional jamás se llegará a procesar (ni el evento a cancelar, claro está) si matas la aplicación desde el administrador de tareas puesto que la ejecución termina de forma inminente: Código
Si alguien me explica estaría muy agradecido. Hay dos soluciones viables: · Mantener dos procesos distintos en ejecución, el segundo proceso podría ser un servicio de windows que monitorizase el estado del primer proceso para detectar el cierre y volver a ejecutar una nueva instancia del proceso después de haber sido cerrado. Obviamente esto no evita que ambos procesos puedan ser matados incondicionalmente. · Hookear la API TerminateProcess y opcionalmente ExitProcess para interceptar las llamadas a dicha función, y cancelarlas. Aparte de estar controlando adicionalmente el cierre voluntario en tu aplicación. Te muestro un ejemplo de API hooking escrito en VB.Net, utilizo la librería Deviare (también puedes utilizar Microsoft Detours en C++), el hook se adjunta al proceso activo taskmgr.exe para evitar que éste pueda terminar ningún proceso, interceptando las llamadas que dicho proceso hace a la función TerminateProcess para cancelarlo (en la pre-llamada): Código
PD: El primer parámetro de TerminateProcess especifica el handle del proceso que se va a matar, con eso puedes determinar que proceso es, pero lee bien la documentación de MSDN que te he dejado arriba por que me parece que es más complicado que una simple verificación de handles... quizás puedas necesitar la siguiente enumeración para la verificación: Código
Saludos Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: scott_ en 9 Abril 2015, 08:50 am He tratado de desarrollarlo en C#, pero con el informe que me has dado y los ejemplos mostrados en VB, pues he observado que el archivo no se puede cerrar, ni tampoco eliminar sin usar taskmgr. El típico proceso que no se cierra porque se esta ejecutando. Y pues para lo que estoy probando me es mas que suficiente.
Pero me entro otra duda. Sobre El Drag Drop desde .bat del anterior tema. Código: copy "%UserProfile%\AppData\Roaming\File.exe" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup" ¿Y me gustara saber como lo puedo hacer para ejecutar un Drag Drop al abrir un archivo, el que sea en VB o en (batch).bat? Es decir que lo copie el mismo archivo en cualquier directorio, cuando se abra. Gracias por tomarte la molestia de responder. Te agradezco mucho. Gracias y Saludos. Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: Eleкtro en 9 Abril 2015, 09:48 am me gustara saber como lo puedo hacer para ejecutar un Drag Drop al abrir un archivo ¿Puedes intentar ser más específico?, no entendí lo que pretendes decir con "ejecutar un drag drop al abrir un archivo". ¿Te refieres a añadir capacidad Drag&Drop (arrastrar y soltar) de archivos en un Form?... ...En ese caso primero debes activar la propiedad 'AllowDrop' del Form/Control y suscribirte a los eventos 'DragEnter' y 'DragDrop' de dicho Form/Control, el primer evento se dispara al arrastrar y el segundo evento al soltar. Te muestro un ejemplo con un TextBox: Código
Traducción online a C#: Código
PD: No te rebajes a utilizar Batch pudiendo manejarte en un lenguaje de alto nivel. Saludos Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: scott_ en 10 Abril 2015, 00:03 am Me parece excelente la traducción en C#, pero no es lo que busco exactamente, me refiero a que un ejecutable se abra y se copie en un directorio.
El ejemplo te lo dejo aqui: http://www.mediafire.com/download/8md4ra7iz6rir3q/File.rar Voy a tomar en cuenta el script que me dejaste. Te agradezco por tu tiempo. Gracias y Saludos. Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: Eleкtro en 10 Abril 2015, 00:30 am me refiero a que un ejecutable se abra y se copie en un directorio. Código
¿Eso dices? Saludos Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: scott_ en 10 Abril 2015, 01:13 am Si ese es el código que busco.
En mi caso en C#: Código
No me queda que agradecerte por tu tiempo invertido. Muchas Gracias y Saludos. Título: Re: ¿Hay alguna funcion para evitar que un archivo se cierre? Publicado por: Eleкtro en 10 Abril 2015, 05:04 am de nada hombre
saludos |