In the afternoon I had to do something with Windows services. As a result a better ServiceController should be used to know the executable name.
Fine, everything works well as expected. Thanks a lot, Mohamed Sharaf.
BTW, it is still not easy to use the code in the sample because I need to call ServiceController.GetServices() so I write a static function instead,