2013-09-30 36 views
2

我有一個(第三方)WinForms應用程序,我需要在Windows Server上24/7保持活動狀態。我的第一個想法是編寫一個啓動應用程序的Windows服務(使用System.Diagnostics.Process),如果應用程序崩潰或服務器重新啓動,請重新啓動它。從Windows服務啓動WinForms應用程序

這甚至可能嗎?即使沒有用戶在服務器上登錄,我也需要啓動它。沒有人登錄時,是否可以運行帶有用戶界面的應用程序?如果不是,是否有解決方法?

N.B.我不需要以任何方式與應用程序交互,我只需要啓動它。

回答

0

爲什麼你需要保持一個表格24/7運行?這是我能想象的一些可能性。

  1. 您需要每隔一段時間纔會發生一次特定行爲。
  2. 它打開一個您希望其他應用程序連接到的端口。
  3. 您不希望員工能夠退出應用程序。

如果答案是#3,那麼Windows服務不是正確的答案,任何你嘗試的東西都會變成巨大的黑客攻擊。如果它是#1或#2,則需要考慮將您的單個應用程序分成兩個。

對於重複性任務,最簡單的解決方案是開發控制檯應用程序並在Windows任務計劃程序中設置任務。這比Windows服務更易於管理和調試。如果您嘗試運行某種套接字服務,那麼典型的方法是創建一個沒有GUI的應用程序,訪問它的唯一方法是通過套接字連接。如果WinForm關閉了套接字服務,那麼WinForm會在重新打開時獲取最新信息。

+0

的應用程序是不大不小的數據採集平臺。它從多個來源(tcp,rs232等)收集數據並將其保存在數據庫中。我沒有這個應用程序的源代碼,所以我不能以任何方式操作它,我只能啓動它。我需要確保它始終在運行。 – Joel

+0

@Joel - 那麼你在那條小溪上呢。 Windows服務不是爲基於表單的應用程序設計的。 –

+0

是的,這就是我正在意識到的....我只是希望有一種方法可以在沒有用戶「分配」的情況下啓動應用程序 – Joel

0

我建議你想一個不同的方法。試圖通過Windows服務向用戶展示GUI不是一件容易的事,我遇到了類似的情況,最後我不得不採取不同的方法。

你爲什麼不能直接顯示從服務 UI:這是由於一些安全實施 進入Windows操作系統,與Windows Vista和更高操作系統版本。 微軟不允許Windows服務在直接與 用戶桌面交互,因爲它導致了一些security flaw

-

我不需要以任何方式

與應用程序交互

如果是這樣的話,我認爲應用程序不需要任何用戶交互來繼續其操作,它會自己做?如果那你甚至可以去一個command prompt EXE。

我需要即使沒有用戶登錄到服務器

我強烈建議你去Windows Task Scheduler它來啓動。這會讓你的生活更輕鬆。它不需要任何用戶手動啓動程序,它可以在計算機啓動/重新啓動時啓動您的progarm,甚至可以安排在特定的時間間隔運行您的程序。你也可以檢查其他好的.net任務調度庫,quartznet就是其中之一。

+0

感謝您的回答,但我在其他答案的評論說,我沒有應用程序的源代碼,所以我不能做任何更改。使用Windows任務計劃程序問題,正如我所看到的,是沒有辦法監視和檢測應用程序是否崩潰,然後重新啓動它。或者我錯了嗎? – Joel

+0

@Joel您可以設置啓動應用程序的時間間隔,並且還有一個屬性設置,只有在程序沒有運行時纔會啓動程序,所以如果程序在時間間隔結束時崩潰,並且程序沒有運行,程序會再次啓動。 – Kurubaran