2011-07-30 42 views
0

所以這一個讓我難住,看起來很奇怪。 我寫了一些在客戶端服務器應用程序設置中充當「服務器」組件的c#表單。 (客戶端發送udp數據,服務器程序突然發出一些數字併發回結果。) 由於各種原因,一次同時運行1個表單和1個實例的4個實例。我有一個bat文件,在電源重置的情況下會自動啓動所有這些表單。.net窗體保持消失,由於TaskManagerClosing

不管怎麼說,所以我想離開這個運行所有的時間,讓他們有點可靠。 一個月前它工作正常,但在過去幾周裏,我已經注意到它們已經消失。有時他們會熬一天,有時候會有4天,但隨後會消失。 (直到最後一次出現,他們都會同時消失,但我沒有看,所以我不能確定。這是最後一次不同的形式一直保持運行的原因。)

所以我添加了一些日誌記錄,並發現所有表單在同一秒內消失,並且_FormClosing事件顯示TaskManagerClosing的CloseReason。

我知道一個事實,沒有其他人可以物理訪問機器。

什麼可能導致這種情況發生?任何其他人開始思考也許我的電腦感染?只是一個想法,但這種行爲對於惡意軟件或病毒無論如何都會很奇怪。特別是因爲電腦上的其他東西似乎表現得很好。這就是說我確實安裝了tightVNC,可能這不是那麼安全。

除此之外是沒有多少人,也許反病毒軟件或Ad-Aware是封閉的形式存在?

想法? 在此先感謝。

+0

我想你應該問在[服務器故障](http://serverfault.com/)。 –

回答

0

只是有些想法,因爲這看起來很奇怪。

首先,MSDN documentation在聲明CloseReason.TaskManagerClosing指示「Windows任務管理器正在關閉應用程序」時會引起誤解。相反,當窗口收到WM_CLOSE消息(0x10)時,CloseReason.TaskManagerClosing可能被設置爲關閉原因,該消息可能源自系統上的任何進程,而不一定是任務管理器。

這引發了一個問題:爲什麼在這些進程上調用WM_CLOSE?一種可能性是偵聽UDP數據包會觸發安全軟件(病毒/廣告軟件)上的基於規則的過濾器,這可能會在進程關閉時顯示在軟件和Windows事件日誌中。除此之外,在不知道擁有過程的情況下很難診斷。

雖然它沒有解決的根本原因,一個實際的選擇是簡單地取消響應於所述的FormClosing事件WM_CLOSE請求。

 if (e.CloseReason == CloseReason.TaskManagerClosing) 
      e.Cancel = true; 

另一種選擇是將軟件重新組織爲Windows服務而不是應用程序。服務往往更適合服務器類型的應用程序,因爲它們在自己的用戶會話中運行。但它也需要將用戶界面功能與服務器功能分開,並且也不會解決潛在的問題。

最後,如果這是一個服務器,你可能要重新審視任何已安裝的服務或公用事業可能是多餘的,莫名其妙發送WM_CLOSE命令的應用實例。另外,將服務器應用程序實例移動到乾淨的服務器上可能是解決問題的一種實用方法。

+0

感謝您的建議。將嘗試查看事件日誌,以前沒有看到任何東西,但現在我知道更多要查找的內容。也會嘗試轉換一些安全的東西。 Fyi這只是一臺運行Windows XP的POS舊筆記本電腦。這項服務並不是真的讓我賺錢,所以我現在只是儘可能便宜。 – user602622

+0

嗯,我試過e.Cancel。當它再次消失時似乎沒有奏效。我想我會嘗試刪除/禁用我能找到的所有東西。那麼如果它仍然發生,我會嘗試將它部署在雲中新的Windows Server 2008 VM上,看看它在那裏是否穩定。 – user602622

+2

好吧,在像所有事情一樣沒有發揮和問題仍然在發生之後,我終於終於明白了。這很愚蠢。所以我使用計劃任務在計算機啓動時啓動程序。那麼在Windows XP中,自動檢查「停止任務如果運行72小時」的opton。 DOOOOHHHHHH !!!!!!! – user602622