2009-12-21 5 views
0

Dans Visual Studio lorsque j'essaie de démarrer un projet de service Windows, il me dit que je ne peux pas parce que je dois utiliser "NET Start" et ainsi de suite.Comment démarrer un service Windows dans Visual Studio 2008?

Je me souviens dans VS 2003 que quand j'ai appuyé sur play il a démarré le service et l'a arrêté. Est-il possible que lorsque j'appuie sur play ou démarre pour ce projet de service Windows, je peux avoir cette même fonctionnalité. Ce que je fais actuellement est de les installer en utilisant installutil et je mets une commande de pré-processeur avec System.Diagnostics.Debug.Launch() quand j'ai une variable de compilation définie et quand j'utilise le gestionnaire de service il me montre la fenêtre pour sélectionner le débogueur. Encore cette méthode est un peu lourde.

Pour tous ceux qui lisent ceci, n'oubliez pas d'essayer de déboguer UN fil à la fois.

Répondre

1

J'autorise généralement un commutateur de ligne de commande que je peux passer à mon service en utilisant les paramètres d'argument de ligne de commande dans l'EDI. Lorsque ce commutateur est activé, je peux exécuter mon service en tant qu'application standard. Le seul problème ici est que vous devez vous rappeler que les services s'exécutent généralement sous des comptes avec des autorisations restreintes. Le débogage en tant qu'application dans votre contexte utilisateur peut donc se comporter différemment lors de l'accès à des ressources sécurisées. Voici un exemple de code:

static void Main() 
{ 
    if (IsDebugMode()) 
    { 
     MyService svc = new MyService(); 
     svc.DebugStart(); 

     bool bContinue = true; 
     MSG msg = new MSG(); 

      // process the message loop so that any Windows messages related to 
      // COM or hidden windows get processed. 
     while (bContinue && GetMessage(out msg, IntPtr.Zero, 0, 0) > 0) 
     { 
      if (msg.message != WM_QUIT) 
       DispatchMessage(ref msg); 
      else 
       bContinue = false; 
     } 
    } 
    else 
    { 
     ServiceBase.Run(new MyService()); 
    } 
} 

public void DebugStart() 
{ 
this.OnStart(null); 
} 

static bool IsDebugMode() 
{ 
    return (System.Environment.CommandLine.IndexOf("debug") > -1); 
} 
Questions connexes