Étant donné que ServiceBase.OnStart
a une visibilité de protected
, je suis allé sur la voie de la réflexion pour réaliser le débogage.
private static void Main(string[] args)
{
var serviceBases = new ServiceBase[] {new Service() /* ... */ };
#if DEBUG
if (Environment.UserInteractive)
{
const BindingFlags bindingFlags =
BindingFlags.Instance | BindingFlags.NonPublic;
foreach (var serviceBase in serviceBases)
{
var serviceType = serviceBase.GetType();
var methodInfo = serviceType.GetMethod("OnStart", bindingFlags);
new Thread(service => methodInfo.Invoke(service, new object[] {args})).Start(serviceBase);
}
return;
}
#endif
ServiceBase.Run(serviceBases);
}
Notez que Thread
est, par défaut, un thread de premier plan. return
Main
pendant que les threads de faux-services sont en cours d'exécution ne mettra pas fin au processus.