2012-02-09 6 views
0

J'ai créé une application console pour la notification par e-mail en C#. Puis-je convertir cette application console en service de fenêtre?Windows Services pour application console en C# .net

Merci.

+3

Comment appliquer asp.net à cette question? –

+2

La question n'est pas claire, à quoi servira le service Windows? Que fait l'application Console? Votre question a besoin de clarification. –

+0

c'est rapide et facile juste pour créer une tâche planifiée pour l'exécuter de temps en temps. Pourquoi faire un service complet? – Aristos

Répondre

2

En studio visuel, créez un projet "Service Windows" au lieu d'une "Application console". Regardez dans le code qui est généré pour vous. Il y aura une méthode OnStart() et OnStop(). Ce sont les méthodes qui seront appelées lorsque votre service est démarré et arrêté. Mettez votre code dans ces méthodes et vous aurez un service Windows.

0

Quand j'y vais, j'écris l'application dans une classe qui ne la considère pas comme une application console. Je veux dire par là que je n'écris pas sur la console. J'utilise log4net pour tout écrire à ... il suffit de se connecter à Info. Utilisez l'application console pour appeler la classe d'application et dans l'app.config vous pouvez avoir un appender pour la consignation de la console ... ainsi vous obtenez la sortie de la console. Dans le service Windows, cela écrira simplement dans un fichier ou pas du tout pour la journalisation au niveau de l'information. Il est important de noter les différences entre une application de console et un service ... un service n'est pas interactif et vous ne pouvez rien entrer, donc vous devez considérer cela. Pour le service Windows, utilisez la même classe, mais utilisez le projet de service Windows pour le démarrer. ApplicationLogic: a toute la logique pour exécuter l'application.

Peut prendre les arguments pour faire fonctionner l'application comme il le faut, mais n'interagit pas avec la console (peut, mais ce serait un mauvais design). Écrit tout à l'enregistrement (log4net peut-être). ConsoleApp: Est un wrapper autour de ApplicationLogic qui peut demander à l'utilisateur de quoi il a besoin, peut demander une entrée et l'envoyer à ApplicationLogic. A un appender de console de log4net si vous devez voir la sortie d'ApplicationLogic.

WindowsService: est un wrapper autour d'ApplicationLogic. A une logique prédéterminée pour le garder en boucle et exécuter la logique de l'application. Se connecte à un fichier, pas de sortie console.

1

Contrairement à certaines suggestions faites par d'autres réponses, vous ne pouvez probablement pas faire ce que vous voulez en utilisant un service Windows. Il ne peut pas afficher la "notification" attendue car les services ne peuvent afficher aucun type d'interface utilisateur.

La solution appropriée consiste à créer une application régulière qui s'exécute en arrière-plan sans afficher de fenêtres. Vous ne pouvez pas le faire avec une application console (bien, vous pouvez, mais ne compliquons pas les choses) parce que chaque fois que vous l'exécutez, la fenêtre de la console sera affichée. Mais si vous créez une application Windows standard (une application Windows Forms ou WPF), alors ne créez pas de fenêtre, tout ira bien.

Vous souhaiterez probablement créer et placer une icône dans la zone de notification de la barre des tâches, qui traitera l'affichage de la notification à l'arrivée du courrier électronique. Si vous créez une application WinForms, cela peut être fait facilement en utilisant le NotifyIcon component.

Quelque chose comme (avertissement, écrit sans l'aide d'un compilateur!):

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     // Standard infrastructure code 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     // Create a context menu and add item(s) to it 
     ContextMenu mnu = new ContextMenu(); 
     MenuItem mnuExit = new MenuItem("E&xit"); 
     mnu.MenuItems.Add(mnuExit); 
     mnuExit.Click += mnuExit_Click); 

     // Create the NotifyIcon 
     NotifyIcon ni = new NotifyIcon(); 
     ni.Icon = new Icon(GetType(), "icon.ico"); 
     ni.Text = "Email Notifier"; 
     ni.ContextMenu = mnu; 
     ni.Visible = true; 

     // Run the application 
     Application.Run(); 

     // Before exiting, remove the NotifyIcon from the taskbar 
     ni.Visible = false; 
    } 

    private static void mnuExit_Click(object Sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 
} 
Questions connexes