2012-03-11 144 views
1

我有一个C#控制台应用程序,它与SQL Server数据库进行交互,我想将其配置为在系统启动时和用户登录之前启动。我的应用程序是一个无限循环,用于从/向数据库读取/写入数据(处理后),并将日志消息写入控制台窗口。在用户登录之前启动控制台应用程序

我试过Windows任务调度程序。应用程序启动,但我有两个问题:

  1. 该应用程序无法访问数据库)
  2. 当我登录到Windows时,我无法检索应用程序控制台,并且它不会显示在任务管理器的进程列表中。

我真的不知道,如果这个问题,Windows有一个解决方案(或者一个解决方法),但我真的需要它,因为服务器是在遥远地方,而我们从停电权衡中受苦该区域,所以我必须定期检查它,并在每次发生切断时启动我的应用程序。

感谢您的帮助。

+2

你有没有考虑过作为Windows服务运行? – 2012-03-11 15:42:57

回答

1

我怀疑这里要做的是使用两个程序。首先,一个在启动时启动并在失败时重新启动的Windows服务。此服务可能需要连接到SQL服务器凭证(而不是Windows凭据),或者在可访问数据库的服务ID下运行。第二个程序将从用户登录开始,并从Windows服务读取/显示任何日志消息。本质上,它的功能类似于服务编写的日志文件上的“尾部”,尽管您可以想出更复杂的日志记录程序注册过程,以便它可以根据需要直接从服务接收消息。

+0

感谢您的帮助。看来这是我在这里的唯一解决方案。实际上,我选择将应用程序分成两部分:一部分是Windows服务。它甚至在任何用户登录之前启动,但我需要向MSSQLSERVER添加依赖项以便能够访问SQL Server数据库。 Windows服务只是创建一个启动我的控制台应用程序的新进程,并使用具有UDP Appender的log4Net库([link](https://logging.apache.org/log4net/))记录更改,使用指定端口 – 2012-03-18 13:50:56

+0

通过IP发送的UDP网络消息第二部分是一个GUI(winforms)应用程序,其中我添加了一个UDP侦听器,该侦听器从windows服务使用的同一端口接收UDP消息(我为这两个应用程序使用了8081)。然后,它将消息记录到用户界面。为了将侦听器与用户界面分开,并避免UI冻结,我使用SynchronizationContext类启动了一个线程(侦听器),每次收到新消息时都会向UI报告。 – 2012-03-18 13:57:14

1

您可能想重构您的应用程序以成为Windows服务。你必须忍受不能直接“访问”应用程序本身的事实。通常,您会创建一个可以管理该服务的随播应用。想想你在Windows上熟悉的服务...... IIS,SQL Server等等,它们都是以这种方式工作的。

相关问题