La mejor opcion es la q dice Visual Basic, inyectas una dll en el explorer.exe por ejemplo q esté comprobando todo el rato si hasn cerrado tu programa
Esto no funcionará del todo, si descubro en que proceso se ha inyectado (explorer.exe) lo finalizo (se descarga la DLL) y luego finalizo el programa.
Lo más fácil, efectivo y sencillo es crear un centinela, y si te lo quieres currar lo registras como servicio y ya esta. Puedes tambien hacer uso de "bugs" del sistema para hacer más dificil de cerrar (renombrar a lsass.exe, deshabilitar el admin de tareas, etc... pero eso son guarradas).
La programación de un centinela bueno no es fácil, y suelen ser más estables y efectivos si los programas en C. Tengo un centinela programado en VB6 y funciona bastante bien, puede servir para integrarlo a un troyano, keylogger o similares.
Saludos!!