是否可以从控制台应用程序创建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的模型来访问我的数据库
答案 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支持文章介绍了如何。