Como dice Kornel, la protección de los procesos a nivel de SO está aislada por los usuarios. Pero en términos generales, no hay forma de evitar que un usuario finalice su proceso con permiso para hacerlo. Y un usuario tiene permiso para finalizar procesos que se ejecutan como ese usuario.
Incluso si quisiera ejecutarlo como SISTEMA, no podría usar este proceso para interactuar con el usuario que inició sesión. Tendría que ejecutarlo como un servicio y no tendría GUI. Podría intentar otros enfoques, como obtener una DLL cargada en un proceso como Explorer.exe, que los usuarios no interrumpirán porque no quieren, pero eso es simplemente abusivo.
Sería una situación muy mala para los usuarios finales si los desarrolladores pudieran simplemente escribir aplicaciones que no pudieron ser finalizadas. Si se trata de una aplicación interna, puede verificar la falla del servidor para ver si hay alguna forma de lograrlo con la política de grupo.
¿Qué razón legítima tiene para hacer esto? –
Sugiero una alternativa: tener una bandera de estado que muestre el apagado correcto, y si se inicia sin que se establezca esa bandera de apagado, haga un registro de la misma (o más grande). Y luego tiene un servicio que monitorea su proceso y asegura que se está ejecutando. Si el usuario lo mata, simplemente vuelva a iniciarlo. Esto es lo que hacemos con un proceso "debe estar en ejecución" con el que el usuario puede meterse. – mj2008
Tengo una sugerencia: por favor no hagas esto. –