什么是保持C#控制台应用程序运行的最佳方法?

3
我开发了一个控制台应用程序,必须在后台运行。该应用程序必须不断检查数据库是否有新记录。如果返回了新记录,则对其进行处理。目前,我的应用程序使用 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);
  }
}

我认为这是一个合适的解决方案。 - Constantin Treiber
4
您正在使用控制台应用程序来查找后台内容,但控制台应用程序具有带窗口的用户界面(命令控制台)。请考虑改用 Windows 服务,具体操作可参考此链接:http://www.csharp-examples.net/create-windows-service/。 - RBT
如果意图是让程序无人值守运行(不需要有人查看控制台输出),请将其转换为服务。关于Thread.Sleep,请参考https://dev59.com/g2035IYBdhLWcg3wbPfc。 - Cee McSharpface
你试过谷歌搜索“保持C#控制台应用程序运行的最佳方法”吗? - Ash
5个回答

9

创建 Windows 服务应用程序

什么是 Windows 服务?

  • 使您能够创建长时间运行的可执行应用程序,这些程序在它们自己的窗口会话中运行。
  • 可以在计算机启动时自动启动,可以在没有任何用户交互的情况下暂停和重新启动。
  • 通过运行命令行实用程序 InstallUtil.exe 并传递服务的可执行文件路径,可以轻松安装。

为什么要使用 Windows 服务?

一些企业最常见的要求之一是基于某个时间间隔运行长时间的定期作业。例如:每天下午发送通讯或每小时向客户发送电子邮件提醒。

因此,构建 Windows 服务可能是实现目标的可靠解决方案之一,可以在幕后完成所需的工作,而不会干扰其他用户在同一台计算机上的操作。

请参考以下链接进行逐步实施 -

http://www.c-sharpcorner.com/UploadFile/naresh.avari/develop-and-install-a-windows-service-in-C-Sharp/


谢谢您的注意,但链接中包含了所有所需的答案。 - Sourav Kumar
4
如果链接失效或移动,那么仅含链接的答案就会变得无效。为您的帖子添加足够好的上下文可以帮助用户更好地理解您的回答。 - RBT
感谢您详细解释您的答案。干得好!+1个好朋友 :) - user585968

2
你的方法可以让控制台应用程序持续运行,这很好。唯一的问题是你想在后台静默运行,而不让用户知道任何信息。由于控制台应用程序具有窗口化用户界面(命令控制台),用户会一直看到它。以下是你可以做的事情来摆脱命令控制台。由于你已经有了你的控制台应用程序,以下是你需要做的:

转到项目属性 -> 转到应用程序选项卡 -> 将输出类型更改为Windows应用程序

enter image description here

哎呀!现在您的相同控制台应用程序将在没有命令控制台的情况下运行,您的代码将继续运行。
创建一个Windows服务对于这样一个简单的逻辑来说太过繁琐。此外,安装Windows服务是额外的开销,虽然我不知道您的应用程序在生产环境中的部署计划。

1

1
不需要将程序运行为服务,这些小任务不需要服务。你可以简单地创建一个Windows(GUI、WinForms)应用程序,并隐藏窗口。或者干脆不创建窗口,只让Main 运行。Main 会启动一个线程并等待该线程完成。
服务必须被安装为服务,而不是所有用户都有权限这样做。拥有服务、管理服务、解决安全属性等问题是一项复杂的任务。 隐藏 应用程序可以在当前用户账户中简单地运行(服务将在高特权SYSTEM或NETWORK帐户中运行)。你的应用程序不会要求当前用户的任何特权 - 它只需要 SQL 数据库/表读取权限。

-2
创建一个 Windows 服务,用于检查您的控制台应用程序是否正在运行。如果控制台应用程序关闭,则 Windows 服务将再次执行它。
不要将控制台应用程序的代码编写到 Windows 服务中。因为如果它在 Windows 启动时自动启动,那么它可能无法像您的控制台应用程序一样正常工作。

2
为什么不完全放弃控制台应用程序,将处理过程放在Windows服务中呢? - user585968
如果控制台应用程序崩溃会发生什么?通过这样做,您正在创建一个控制机制。 - Orkun Bekar
1
OP的代码没有错误处理。此外,Windows服务允许您指定恢复选项,例如重新启动服务。 “它可能无法正常工作” - 也没有保证它会像控制台应用程序一样工作。 - user585968
1
Windows服务有一个启动类型选项“手动”。这不允许Windows服务在操作系统重新启动时自动启动。 - RBT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接