2

是否可以从控制台应用程序创建 Windows 服务。事实上,我制作了一个控制台应用程序,可以从数据库向人员发送电子邮件,但是当我尝试使用几乎相同的代码创建服务时,它不起作用。安装后不再发送电子邮件。因此,如果有办法,我想将我的控制台应用程序转换为服务,因为我想自动发送它们并且我不想使用任务调度程序。

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

     {
        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 的模型来访问我的数据库

4

5 回答 5

1

我不会尝试直接转换它,而是先尝试编写一个非常简单的服务来感受它的工作原理。也许是一些简单的事情,比如每 5 分钟将日期和时间写入一个文件。然后,您可以尝试将您的代码添加到服务主体。

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

于 2012-08-15T10:32:39.523 回答
1

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

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

于 2012-08-15T10:32:42.087 回答
1

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

于 2012-08-23T15:52:35.977 回答
0

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

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

于 2012-08-15T09:56:27.547 回答
0

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

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

这篇Microsoft 支持文章展示了如何操作。

于 2012-08-15T12:14:29.393 回答