Hoy os traigo algo muy sencillo pero que seguro que nos es muy útil en algún momento de programación como desarrolladores que somos.
Bueno se trata de forzar el cierre de una aplicación o proceso en ejecución en nuestro sistema usando C# (C Sharp)
Para ello utilizaremos el namespace System.Diagnostics
Empecemos mostrando el código de ejemplo y ahora lo explicamos un poco aunque no es necesario.
1 2 3 4 5 6 7 8 9 10 | //Insertar namespace al inicio del código using System.Diagnostics; //... foreach (Process proceso in Process.GetProcesses()) { if (proceso.ProcessName == "nombre_proceso") { proceso.Kill(); } } |
Como veis el código es muy sencillo, lo que hacemos en foreach es obtener todos los procesos en ejecución y recorrerlos uno a uno, y con la condición if le decimos que cuando el proceso se llame de una forma en concreta acceda y mate el proceso.
Espero que os sirva, cualquier duda podéis preguntamela en los comentarios.
Un saludo.
¿Y si quiero que siempre que el usuario trate de abrir la aplicación se cierre sin dar sin más? Osea que cada vez que abra excel se cierre, como lo hago.
Una forma rudimentaria que se me ocurre es creando una aplicación que se ejecute en segundo plano y que cada X tiempo (milisegundos) compruebe si ese proceso existe y en el caso de que exista lo cierre. Un saludo.
tengo una consulta, de qué forma podría «bloquear» un proceso para prevenir que se levante, aún cuando el mismo no se encuentre en ejecución.
Gracias de antemano
Hola que tal me sirvió demasiado encontré este método y lo complete con el tuyo lo dejo por si ha alguien le funciona.
/*Obtener ID del Proceso*/
private int getExcelFileProcessId(string excelFileName)
{
Process[] localByName = Process.GetProcessesByName(«EXCEL»);
var processes = from p in Process.GetProcessesByName(«EXCEL»)
select p;
foreach (var process in processes)
{
if (process.MainWindowTitle == «»)
{
procId = process.Id;
}
}
return procId;
}
//helper method to kill zombie excel processes
private void KillSpecificExcelFileProcess(int anId,string excelName)
{
var processes = from p in Process.GetProcessesByName(«Excel»)
select p;
foreach (var process in processes)
{
if (process.Id == anId)
{
process.Kill();
}
}
}
Gracias por tu aportación. Un saludo.
Yo copie el codigo y lo ocupé para que se ejecute cuando aprietes un boton pero no se cierra la aplicacion que especifiqué en el if statement, tambien probé ejecutandolo como administrador pero solo lo ignora
¿Que aplicación estas intentando cerrar? Revisa que hayas puesto bien el nombre del proceso a cerrar.
/* Para obtener el nombre del proceso
* 1._Ejecutar el programa a eliminar
* 2._Abrir ‘Administrador de tareas’
* 3._Click derecho y en propiedades sobre el proceso a eliminar
* 4._El nombre aparece al lado del icono
*/
Hola, me funciona bien, solo que yo trabajo con directorio activo, y si ejecuto el programa con un usuario sin privilegios no mata los procesos que hayan iniciado otros usuarios, solo los que inicio el, como le hago para que los mate todos, independientemente si lo inicio el o no. Por ejemplo, si inicio excel con el usuario 1 y el usuario2. y el usuario 1 quiere tumbar todos los procesos excel, con esto que pones solo puede tumbar el excel que inicio el usuario 1, pero el que inicio el usuario 2 no lo hace, me dice acceso denegado.
Saludos.
Debes de ejecutar la aplicación con el usuario Administrador. Un saludo
Si, eso ya lo probe, si lo ejecuto como administrador si funciona bien, el asunto aqui es que requiero que sea el usuario restringuido el que lo ejecute, por eso hago mi consulta, hay manera de pasarle credenciales de administrador en el objeto para que si pueda cerrar los procesos de todos los usuarios.
No conozco forma de saltarse la seguridad del sistema operativo para coger privilegios de administrador sin ser el administrador el que lo ejecute. Un saludo