2010-07-03 50 views
1

我寫了一個在我的xp開發機器上運行良好的C#應用​​程序。 當我的客戶在不同的PC上運行它時,它似乎凍結在Vista和7臺機器上。 我想知道在vista/7上運行dotnet應用程序是否存在問題。 我編譯的框架2.0和3.5的應用程序,但它沒有幫助。 日誌文件既沒有幫助。 有沒有什麼辦法可以知道應用程序在哪裏凍結(當然,客戶端沒有附加到應用程序的VS)? 非常感謝您的幫助。C#應用程序在vista/7上是凍結的,而不是在xp/2003服務器上

Pierre。

+0

該應用程序做什麼?它是多線程的,可能存在死鎖?如果您提供有關應用程序的實際功能的更多信息,其他人可能會發現可能的問題原因。 – 2010-07-03 15:38:08

+0

您能否詳細說明應用程序在工作環境中會做些什麼?什麼是應用程序?是否有數據庫參與?文件系統? etc ... – spinon 2010-07-03 15:46:53

+0

該應用程序正在通過本網站提供的API訪問網站。 – Pierre 2010-07-03 16:31:09

回答

0

你不會給我們太多的信息以幫助我們。

我會先嚐試在虛擬機上本地重新創建問題(Vista可用here),然後使用類似memprofiler的內容對應用進行分析。

+0

我有一個Windows 7 PC,但我無法重新創建問題。 – Pierre 2010-07-03 15:28:02

+0

:)是的,最奇怪的問題不能在另一臺機器上重現。 – 2010-07-04 02:37:20

2

通常,.NET應用程序應該在安裝了.NET框架的任何Windows版本上運行相同。發生的最常見問題與Vista和7中的新用戶帳戶控制策略有關,該策略可阻止應用程序訪問需要提升權限的區域(否則這些區域可在XP中的管理員帳戶下正常運行)。例如,如果您的應用程序試圖將配置設置寫入Program Files文件夾(這是一個非常糟糕的主意,btw),或者正在使用一些硬編碼的磁盤或註冊表路徑,而不是.NET類中提供的環境變量,它可能會在Vista下失敗。

要快速檢查這是否是UAC特權問題,請嘗試以管理員身份運行該應用程序(讓客戶端右鍵單擊.exe文件並選擇以管理員身份運行)。如果它有效,那麼這表明您需要檢查您的代碼並進行更新,以確保您只能訪問允許的區域。

點擊此鏈接瞭解更多信息:Making apps UAC aware

由於redsquare建議,在各種Windows系統的測試應用程序的最佳方式是在多個虛擬機(MS Virtual PCVMWare Player,他們都免費下載)運行它們。

+0

這是一個好點,但我有一個Windows 7 PC,它似乎運行。我想我不覆蓋客戶覆蓋的代碼區域,但很難說。最好的辦法是有一個調試器,可以連接到凍結的應用程序來獲得我認爲的堆棧跟蹤。 – Pierre 2010-07-03 16:43:47

+0

內部測試無法捕捉到所有問題,就像皮埃爾面臨的問題。因此,必須使用其他方法。如果他/她不是開發人員,那麼詢問您的客戶使用調試器可能太難了。通常情況下,流程轉儲更易於捕獲,並提供足夠的信息進行故障排除。 – 2010-07-04 02:36:28

0

讓您的客戶捕捉使用Windows任務管理器中的進程轉儲,

  1. 在任務管理器,發現掛的過程。
  2. 右鍵單擊並捕獲內存轉儲。

然後,您可以對轉儲做一些分析,看看它爲什麼掛起。

如果你不熟悉轉儲分析,找到誰可以幫助或通過http://support.microsoft.com

+0

我從我的客戶那裏得到了一個dmp文件。 我加載了Microsoft符號,但我無法加載dotnet符號和我的應用程序符號。 我將應用程序bin/debug目錄添加到符號路徑,但它似乎不加載任何東西。 這裏是調用堆棧,它不能幫助我: – Pierre 2010-07-07 10:46:17

+0

> \t [email protected]()\t \t [email protected]()+位於0xC字節\t \t System.Windows.Forms的。 ni.dll!68bb8ea8()\t \t [幀下面可能不正確和/或缺失,沒有加載System.Windows.Forms.ni.dll符號] \t \t System.Windows.Forms.ni.dll!68bb8ea8( )\t \t System.Windows.Forms.ni.dll!68bb8997()\t \t System.Windows.Forms.ni.dll!68bb87e1()\t \t System.Windows.Forms.ni.dll!68b75931()\t \t [email protected]()+ 0x33字節\t \t [email protected]()+ 0x9f字節\t \t mscorwks .DLL!方法描述:: CallDescr()+ 0x15a字節 – Pierre 2010-07-07 10:47:07

+0

的Mscorwks.dll!方法描述:: CallTargetWorker()+ 0x1F的字節\t \t的Mscorwks.dll!MethodDescCallSite :: CallWithValueTypes_RetArgSlot()+ 0X1A字節\t \t的Mscorwks.dll!的ClassLoader :: RunMain() - 0x39040 bytes \t \t的Mscorwks.dll!大會:: ExecuteMainMethod()+ 0xa4字節\t \t的Mscorwks.dll!SystemDomain :: ExecuteMainMethod()+ 0x416字節\t \t的Mscorwks.dll!ExecuteEXE()+字節×49 \t \t的Mscorwks.dll!__CorExeMain @ 0()+ 0x98在全局字節\t \t mscoreei.dll!71f455ab()\t \t [email protected]()+ 0x227字節\t \t MSCorEE.dll中!__ CorExeMain_Exported @ 0()+位於0x8字節 – Pierre 2010-07-07 10:48:20

0

csharp的應用程序都應該在Vista/win7的運行打開支持案例。這是他們的家:)

你的問題不是操作系統。它的應用程序。 最有可能的應用程序正在尋找一個文件,一個文件夾,在客戶端的東西,不存在和凍結。這是我的經驗。

檢查項目獨立性並確保您已將您的項目所需的一切運送給您的客戶。

最後,分配給一個客戶端調試版本與調試信息啓用並從他們的系統獲得反饋。

相關問題