I am attempting something similar. This is how I'm doing it: I have a process running that is searching for cheats in a game I am hosting and will terminate the cheats when detected. Of course they can simply end task on that program. This is why I am attempting to make a service that is disguised with a generic sounding name that will relaunch the anti-cheat program as soon as it detects that it is missing. It also monitors the files in the game folder and will replace them back to their original if they are messed with. The only issue I'm having is getting the second program to run as a service as ClickOnce is preventing me from running the service as admin by not even letting me publish the file. Without the requestadministrator in the manifest it gives an "access denied".
If you don't need the second program to be a service, you can simply have a second program that checks the processes and when it finds 0 of your process name it will relaunch it. You then have the first program do the same for the second one and if the timer ticks are low enough they won't have time to end task both of them. I was even thinking of adding a third program to check the other two...
If only I could get my friends to just not cheat I could avoid all of this. Hope this helps in some way. I'm still quite the beginner... yet again.