On the topic of "how do i prevent users from doing X", the answer is security. If you want users to have full access to their machines, then you can't restrict them. If you want to restrict users, then change your security policy accordingly.
"But then my employees won't like the idea that we don't trust them with full admin rights" - well, honestly, you don't trust them; that's why you are implementing this. You don't want employees tricking you, and they should expect the same of you.
In addition to what others say, One more simple solution is to just create two processes - one REAL process, and one "sentinel". Basically, every 100ms or so, just do a quick check to see that the other process is alive and healthy, and if it's not, launch it. It's easy to get around this (by using kill.exe
for example), but so is every other solution considering your users are full administrators.
The legitimate solution to really prevent them from killing your app is to restrict access via typical Windows security -- restrict user access to the process. Not by cheap hiding and obfuscation.