2012-03-11 183 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等等,它們都是以這種方式工作的。

相關問題