从控制台应用程序制作Windows服务

时间:2012-08-15 09:52:30

标签: c# windows-services console-application

是否可以从控制台应用程序创建Windows服务。 实际上,我制作了一个控制台应用程序,它可以向数据库中的人发送电子邮件,但是当我尝试使用几乎相同的代码创建服务时,它无法正常工作。安装后,电子邮件不会被发送。所以,如果有办法,我想将我的控制台应用程序转换为服务,因为我想自动发送它们,而且我不想使用任务sheduler。

这是我的控制台应用程序主

     {
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(ConfigurationManager.AppSettings["email"]);
        mail.Subject = "Rappel délai tâche";
        SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["domaine"]);
        client.EnableSsl = true;

        client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["email"], ConfigurationManager.AppSettings["password"]); 

        BDGestionEntities bd = new BDGestionEntities();
        TimeSpan diff;
        DateTime aujourdhui = DateTime.Today;
        List <tache> taches = bd.taches.ToList();

        foreach (var k in taches)
        {
            Console.WriteLine(k.nom_tache);
            diff = k.date_fin.Subtract(aujourdhui);
            int datediff = Convert.ToInt32(diff.TotalDays);
            if (datediff <= 2)
            {



                mail.To.Add(k.utilisateur.email);

                mail.Body = "Bonjour, " + k.utilisateur.nom + " " + k.utilisateur.prenom +
                    "\n\nNous vous envoyons le présent mail pour vous rappeler que la tâche \"" + k.nom_tache + "\" qui vous est accordée touchera à sa fin d'ici deux jours.\nVeuillez respecter le délai. \n\n Bien cordialement.";
                try
                {
                    client.Send(mail);
                    Console.WriteLine("Email envoyé");
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }
        }
    }

事实上,我正在使用带有ado .net的模型来访问我的数据库

5 个答案:

答案 0 :(得分:1)

我不是试着直接转换它,而是先尝试编写一个非常简单的服务,以了解它是如何工作的。也许就像每5分钟写一个文件的日期和时间一样简单。然后,您可以尝试将代码添加到服务主体。

显然你会想要避免任何写入屏幕的内容。这应该写入日志或事件查看器。

答案 1 :(得分:1)

基本代码可以工作,你只需将其移动到服务部分 - 但它可能会在控制台写入行崩溃,因为默认情况下服务无法访问屏幕,并且没有分配控制台。

如果您使用visual studio,它将为您提供服务模板。但是,你可以做同样的工作 - 我实际上改变了我的服务,所以我可以从命令行运行它,如果它有参数/控制台它分配了一个控制台,所以它可以使用它,我可以调试它等。

答案 2 :(得分:1)

我找到了解决方案。实际上,这只是一个连接问题,我所要做的就是为服务添加权限,以便让它访问数据库。谢谢大家。

答案 3 :(得分:0)

Windows服务比控制台应用程序更多。如果您有源,则可以将其转换为一个,或者可以使用现有的服务包装器。如果要转换应用程序,可能需要从以下某个开始

如果您想使用服务包装this可能很有趣,或者其他类似产品。

答案 4 :(得分:0)

Windows 2003 Server Resource Kit提供了两个实用程序,允许您为Windows应用程序创建Windows用户定义的服务。

Instrsrv.exe安装和删除系统服务,Srvany.exe允许任何Windows应用程序作为服务运行。

This Microsoft支持文章介绍了如何。

相关问题