Dot-Net

WPF 應用程序錯誤和 .Net 框架修復

  • July 26, 2012

背景:我有一個在 Windows XP 和 Windows PosReady 2009 PC 上執行的基於 .Net 3.5 WPF“Prism”的應用程序。該應用程序在每晚關閉(通過 C# 呼叫“shutdown.exe”)並在早上重新啟動(通過 LAN 喚醒)的 PC 上執行。該應用程序是基於觸摸的(使用 ELO 觸摸屏),沒有連接滑鼠或鍵盤,使用者無法訪問 Windows。

問題:我們偶爾會看到發生以下兩種情況之一的問題;要麼應用程序似乎沒有正確載入,我們看到一個空白的白色表格顯示,要麼它停止響應觸摸。通過查看我們的 (log4net) 日誌,我們可以看到我們仍在處理觸摸事件並在兩種情況下都將它們註銷。這似乎經常在切換視圖時發生,我們還在日誌中看到 Prism RegionManager 正在適當地刪除和添加視圖。

疑難解答:該應用程序使用 Clonezilla 應用的圖像在大約 100 台 PC 上執行,這種情況只是偶爾發生。由於並非在所有 PC 上都發生這種情況,並且事件查看器中沒有記錄異常或任何表明存在問題的資訊,因此我們採用了更多 PC 和作業系統級別的修復。具體來說,我們嘗試重新啟動應用程序和 PC,偶爾會在短期內成功 - 這意味著有時應用程序會在這些重新啟動後正常執行,但最多只能執行幾個小時。我們還假設應用程序已經以某種方式損壞並且我們已經刪除並重新安裝了它,但沒有成功。

唯一似乎可以解決該問題的方法是使用提供的 .Net 3.5 SP1 安裝程序包修復 .Net 框架。

結論:由於這似乎在沒有其他方法的情況下解決了問題,看來我們正在以某種方式破壞 GAC 的框架 dll - 通過程式碼或 PC 上的啟動/關閉過程。

問題:這導致了一些問題:

  • 關於我們如何進一步確定問題根源的任何想法?
  • 關於我們可以做些什麼來防止這個問題的任何想法?
  • 關於潛在問題可能是什麼的任何想法?

謝謝你的幫助。

我們終於能夠找到表現出這種行為的生產機器,並通過一系列故障排除步驟,包括向 Microsoft 發送轉儲文件,問題得以定位。

WPF 字型記憶體 Windows 服務偶爾會進入損壞狀態,導致簡單的記憶體請求無限期阻塞。此掛起導致我們的 WPF 應用程序中出現上述所有行為。

簡單的解決方案:停止並禁用該服務。禁用該服務並重新啟動 PC 後,該服務不再使用,我們看不到任何這些問題。從理論上講,這會導致更長的應用程序載入時間,但我們看到的負面影響為零。

請注意,該服務有兩個版本:3.0.0.0 和 4.0.0.0。如果您的應用程序面向 .Net 3.0 或 3.5,則需要禁用 3 服務,如果面向 4.0+,則需要禁用 4 服務。

感謝大家的意見和建議。

引用自:https://stackoverflow.com/questions/9242174