我开发了一个必须在后台运行的控制台应用程序。应用程序必须不断检查数据库以获取新记录。如果返回新记录,则会对其进行处理。我当前使用的应用程序使用while(true)来保持应用程序运行。使用while循环是最佳解决方案。
我的代码片段:
static void Main(string[] args)
{
while(true)
{
// Query db for new records
if(record_count > 0)
{
// Process the records
}
Thread.Sleep(500);
}
}
答案 0 :(得分:10)
创建为Windows服务应用程序
什么是Windows服务?
为何选择Windows服务?
某些企业最常见的要求之一是基于某个时间间隔长期运行的预定作业。例如:每天下午发送简报或每隔一小时向客户发送一封电子邮件提醒。
因此,构建Windows服务可能是实现目标的可靠解决方案之一,该目标可以在幕后执行所需的工作,而不会干扰同一台计算机上的其他用户。
请参阅分步实施的链接 -
答案 1 :(得分:2)
保持控制台应用程序持续运行的方法绝对没问题。唯一的问题是你想让它在后台默默运行,而无需用户知道任何事情。由于控制台应用程序具有窗口UI(命令控制台),因此用户将继续看到它。这是你可以做的摆脱命令控制台。由于您已经拥有了控制台应用程序,因此您需要执行以下操作:
转到项目属性 - >转到应用程序选项卡 - >将输出类型更改为Windows Application
唷!现在,您的同一个控制台应用程序将在没有命令控制台的情况下运行,您的代码将继续运行。
创建一个Windows服务对于这么简单的逻辑来说太过分了。安装Windows服务也是额外的开销,但我不了解您期望在生产中使用的部署。
答案 2 :(得分:1)
更好的选择是使用在后台运行的 Windows服务。
Creating a Windows Service Application
Develop and Install a Windows Service in C#
只是谷歌,你可以在Windows服务上找到很多文章和教程。
答案 3 :(得分:1)
无需使您的程序作为服务运行。服务不适合这些小任务。您应该只使用隐藏窗口创建一个Windows(GUI,WinForms)应用程序。或者,只是不要创建一个窗口,只是让Main
运行。 Main
将启动一个线程并自己等待该线程。
服务必须作为服务安装,并非所有用户都有权这样做。拥有服务,管理它,安全属性安定等是一项复杂的任务。人。
隐藏应用程序可以在当前用户帐户中运行(该服务将在高权限SYSTEM或NETWORK帐户中运行)。您的应用程序不会要求当前用户提供任何权限 - 它只需要SQL数据库/表读访问权。
答案 4 :(得分:-2)
创建一个Windows服务,检查您的控制台应用是否正在运行。如果控制台应用程序关闭,则Windows服务将再次执行它。
不要将控制台应用程序的代码写入Windows服务。因为如果它会在Windows启动时自动启动,那么它可能无法正常作为您的控制台应用程序。