web-dev-qa-db-fra.com

Certains services s'arrêtent automatiquement s'ils ne sont pas utilisés par d'autres services

Erreur "Certains services s'arrêtent automatiquement s'ils ne sont pas utilisés par d'autres services" lors de la tentative de démarrage d'un service Windows. 

J'ai un service qui n'utilise pas le fichier de configuration du service Windows et utilise des propriétés statiques - cela fonctionne bien

Maintenant, je me sers du fichier app.config et je reconstruis mon projet d'installation + le projet de service. Maintenant, j'installe le service, puis j'essaie de le démarrer - j'obtiens l'erreur suivante:

CERTAINS SERVICES ARRÊTENT AUTOMATIQUEMENT SI CEUX-CI NE SONT PAS UTILISÉS

Le service se connecte en tant que système local.

Toute entrée est la bienvenue s'il vous plaît! Merci. 

17
paras_doshi

Ceci est généralement le résultat de l'une des deux choses suivantes: (a) votre méthode OnStart() génère une exception ou (b) la méthode OnStart() ne lance pas un thread pour fonctionner.

Si le problème est (a), la solution évidente consiste à déboguer le service pour identifier ce qui ne va pas. Au minimum, placez un bloc try-catch autour du contenu de la méthode OnStart() et enregistrez une erreur dans le journal des événements système lorsqu'une exception se produit. Ensuite, vous pouvez voir les détails dans l'afficheur d'événements Windows.

Si le problème est (b), vous devez créer un thread qui fait quelque chose. Le thread doit être un thread de premier plan (par opposition à un thread d'arrière-plan) pour empêcher le service de s'arrêter. Une méthode typique de OnStart() ressemble à ceci:

private System.Threading.Thread _thread;

protected override void OnStart(string[] args)
{
    try
    {
        // Uncomment this line to debug...
        //System.Diagnostics.Debugger.Break();

        // Create the thread object that will do the service's work.
        _thread = new System.Threading.Thread(DoWork);

        // Start the thread.
        _thread.Start();

        // Log an event to indicate successful start.
        EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
    }
    catch (Exception ex)
    {
        // Log the exception.
        EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
    }
}

private void DoWork()
{
    // Do the service work here...
}
35
Matt Davis

J'ai eu cette erreur et c'était parce que le disque dur était plein. Il peut s'agir de tout ce qui empêche le service de fonctionner.

3
BBoyd

J'ai eu la même erreur qui était due à la non création des dll lors de l'exécution de installUtil.cmd sur mon serviceInstaller.msi. Pour résoudre ce problème, je devais inclure l'un de ces => <File Id="Interception" Source="$(var.SourceDir)\Microsoft.Practices.Unity.Interception.dll" /> pour chaque dll que j'attendais dans mon projet et le placer dans mon fichier Service.wxs. Comme ceci => <Fragment><DirectoryRef Id="ApplicationDirectory"><Component Id="ServiceID" Guid="$(var.ServiceGuid)"> *here* <closing tags...>. Et assurez-vous que toutes les dll sont incluses dans les commandes de copie des programmes d’installation :) 

J'espère que cela t'aides!

0
CRoberts