簡體   English   中英

從Windows服務啟動WinForms應用程序

[英]Start WinForms application from Windows Service

我有一個(第三方)WinForms應用程序,我需要在Windows Server上保持24/7實時運行。 我的第一個想法是編寫一個Windows服務,該應用程序將啟動應用程序(使用System.Diagnostics.Process ),並在應用程序崩潰或服務器重新啟動時重新啟動它。

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

注意:我不需要以任何方式與應用程序交互,只需要啟動它即可。

為什么需要保持24/7全天候運行的表單? 我可以想象這是一些可能性。

  1. 您需要經常執行特定的行為。
  2. 它正在打開一個端口,您希望其他應用程序連接到該端口。
  3. 您不希望員工能夠退出該應用程序。

如果答案是#3,則Windows服務不是正確的答案,您嘗試做的任何事情都將變成一個巨大的黑客。 如果是#1或#2,則需要考慮將單個應用程序分為兩個。

對於重復執行的任務,最簡單的解決方案是開發控制台應用程序並在Windows Task Scheduler中設置Task。 這比Windows服務更容易管理和調試。 如果您嘗試運行某種套接字服務,那么典型的方法是創建一個沒有GUI的應用程序,唯一的訪問方法是通過套接字連接。 如果WinForm關閉,套接字服務將繼續運行,並且WinForm在重新打開時可以獲取最新信息。

我建議您考慮另一種方法。 試圖通過Windows服務向用戶顯示GUI並不是一件容易的事,我遇到了類似的情況,最后我不得不采用另一種方法。

為什么不能直接從Service中顯示UI :這是由於Windows Vista和更高版本的Windows OS中引入了一些安全性實現。 微軟禁止Windows服務直接與用戶桌面進行交互,因為它導致了一些安全漏洞

-

我不需要以任何方式與應用程序進行交互

如果是這樣,我認為應用程序不需要任何用戶交互即可繼續其操作,它將自己進行操作? 如果是的話,甚至可以使用command prompt exe。

即使服務器上沒有用戶登錄,我也需要啟動它

我強烈建議您使用Windows Task Scheduler 這將使您的生活更加輕松。 它不需要任何用戶手動啟動程序,它可以在計算機啟動/重新啟動時啟動您的程序,甚至您可以計划在特定的時間間隔運行程序。 您也可以檢查其他好的.net任務調度庫, quartznet是其中之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM