2009-11-12 2 views
0

Mon service Windows est capable de lancer des threads (en poursuivant le délégué ThreadStart) dans Win XP, mais dans Win 2003 Server il ne peut pas, il ne lève pas une exception aussi ... le le fil ne démarre tout simplement pas.Windows Service ne peut pas démarrer un thread dans Win Server 2003

J'ai fait un test Windows Service qui a le même code dans le gestionnaire d'événement (OnStart) et cela a fonctionné sur Win XP et Win 2003 Server, ce qui me rend fou, je ne sais pas quel est le problème avec mon service original , pourquoi il ne peut pas commencer le fil.

ici est le code à la fois mon service Gagnez le problème et dans le test Win service qui fonctionnait très bien:

private Thread trd; 
    StreamWriter sw; 
    int i = 0; 


    protected override void OnStart(string[] args) 
    { 
     // TODO: Add code here to start your service. 
     sw = new StreamWriter("c:\\TestingService.txt", true); 

     trd = new Thread(new ThreadStart(this.LoopingThread)); 
     trd.IsBackground = false; 
     trd.Priority = ThreadPriority.Highest; 
     trd.Start(); 
    } 

    protected override void OnStop() 
    { 
     // TODO: Add code here to perform any tear-down necessary to stop your service. 
    } 

    private void LoopingThread() 
    { 
     while (i < 100) 
     { 
      lock (sw) 
      { 
       sw.WriteLine("hello from thread i="+i.ToString()); 
       sw.Flush(); 
      } 
      i++; 
      Thread.Sleep(1000); 
     } 
    } 

ce code est « exactement » identique sur les deux services Win. mon service original (qui ont le problème) a de nombreuses références à d'autres DLL, et son « Utilisation » la liste est:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.ServiceProcess; 
using System.Text; 
using System.IO; 
using System.Xml; 
using System.Security.Principal; 
using System.Reflection; 
using System.Threading; 
using System.Management; 

et d'autres déclarations à l'aide qui est lié à certaines DLLs confidentielles (3e parties) mais je Je ne crée aucun objet ... le code efficace est ce que j'ai affiché.

Je ne peux pas comprendre pourquoi mon service Win ne peux pas lancer les discussions sur Win 2003 Server

+0

Qu'est-ce qui est mis dans le eventlog pour cela? Il nous donnera plus d'indices pour vous aider – AutomatedTester

+0

Je suis un peu confus - dites-vous que le code que vous avez posté fonctionne bien (sur Win2003) par lui-même, mais quand vous ajoutez les références à la 3ème partie (et d'autres DLL) et les instructions using montré qu'il cesse de fonctionner? –

Répondre

0

Cela a été résolu d'une manière très stupide !! Je viens de créer une autre classe dans mon Windows Service, j'ai copié tout le code, puis j'ai créé le code dans program.cs en créant une instance de cette classe à la place de l'ancienne classe de service.

tout a bien fonctionné après cela, je ne sais pas ce qui est arrivé !!

Merci à tous ceux qui ont essayé d'aider

1

Mettre un appel à System.Diagnostics.Debugger.Break() au début de votre méthode OnStart() et compilent en debug. Lorsque vous démarrez le service, vous serez invité à démarrer une session de débogage. Une fois dans le débogueur, ouvrez la boîte de dialogue Exceptions du menu Déboguer et vérifiez la colonne Thrown pour les exceptions Common Language Runtime. Votre service s'arrêtera si une exception est levée.

Si je devais deviner, je dirais que la raison pour laquelle votre thread ne démarre pas est parce qu'il ne va pas si loin. Basé sur le code que vous avez fourni, je dirais que la création de StreamWriter échoue pour une raison quelconque. Par exemple, vous ne pouvez pas avoir des autorisations d'écriture sur le lecteur C sur l'ordinateur Win 2003 Server.

Questions connexes