【问题标题】:Making a windows service from a console application从控制台应用程序创建 Windows 服务
【发布时间】:2012-08-15 09:52:29
【问题描述】:

是否可以从控制台应用程序创建 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 的模型来访问我的数据库

【问题讨论】:

  • 很模糊,您需要详细说明您尝试过的内容。
  • 您可以将 Vici WinService 库与您的控制台应用程序链接,以将其变成功能齐全的 Windows 服务:viciproject.com/wiki/projects/winservice/home
  • @Liam 是正确的。请说明哪些内容不适用于您的服务。如果您不知道它为什么不起作用,请查看 Windows 事件日志。
  • 控制台应用程序仍然可以执行假定它们可以访问用户桌面的操作。相同的代码将在服务应用程序中失败。以某种方式被欺骗作为服务运行的控制台应用程序将在完全相同的时间点失败。

标签: c# windows-services console-application


【解决方案1】:

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

显然,您会希望避免任何写入屏幕的内容。这应该写入日志或事件查看器。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          ThisMicrosoft 支持文章显示了如何。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-25
            • 1970-01-01
            • 1970-01-01
            • 2011-12-07
            • 1970-01-01
            相关资源
            最近更新 更多