Question

J'écris une série de services Windows. Je souhaite qu’ils échouent si des erreurs sont générées au démarrage (méthode OnStart () ). J'avais supposé que le simple fait de générer une erreur dans OnStart () ferait cela, mais je constate qu'au lieu de cela, il "Starts" et me présente un message indiquant "Le service a démarré mais est inactif. Est-ce correct? & Quot; (Paraphrase). Comment gérer l'erreur de sorte que le service ne démarre pas?

Était-ce utile?

La solution

si vous utilisez .NET 2.0 ou version ultérieure, vous pouvez utiliser ServiceBase.Stop pour arrêter le service à partir de OnStart. Sinon, appelez Stop depuis un nouveau thread.

ref [devnewsgroups] ( http: / /www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx )

(groupe de discussion disparu)

Autres conseils

Si ce que vous voulez surtout, c’est que la fenêtre Services indique qu’une erreur est survenue, selon ce que j’ai essayé (.net 3.5 sur Windows 7), le seul moyen de le faire est de définir ExitCode. Je vous recommande de le définir sur 13816, car cela entraîne le message "Une erreur inconnue s'est produite". Consultez les codes d'erreur de Windows .

L’échantillon ci-dessous accomplit trois choses. 1 - la configuration de ExitCode génère un message utile pour l'utilisateur final. Cela n'affecte pas le journal des applications Windows, mais inclut un message dans le journal système. 2 - L’appel d’arrêt aboutit à un "service arrêté avec succès". message dans le journal d'application. 3 - le lancement de l'exception génère une entrée de journal utile dans le journal des applications.

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

Déplacez toute votre logique de démarrage vers une méthode distincte et lève les exceptions (ou appelle OnStop) à partir de cette méthode distincte.

OnStart a quelques bizarreries au démarrage. J'ai constaté que si OnStart () ne comporte pas plus d'une ligne, je ne reçois pas le "service démarré, puis arrêté. Certains services s'arrêtent automatiquement s'ils n'ont pas de travail à faire". message, et les exceptions levées mettront fin au processus et se connecteront au journal des événements de l'application.

Également avec la méthode de démarrage séparée, vous pouvez utiliser une technique comme celle-ci pour la déboguer sans l'attacher. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top