2011-09-09 53 views
0

我正在運行Windows 7 x64機器,當我不編譯爲x64我得到一個異常,我的ListView只是填充前兩個非x64進程。c#ListView填充當前進程信息:PID /進程名/路徑錯誤,當不編譯爲x64

即我無法訪問64位進程的MainModule屬性以獲取它的完整路徑。

foreach(Process p in listaProcessi) 
{ 
    tempItem = new ListViewItem(p.Id.ToString()); 
    tempItem.SubItems.Add(p.ProcessName); 
    tempItem.SubItems.Add(p.MainModule.FileName); 
    processiListView.Items.Add(tempItem); 
} 

我仍然可以讓它工作編譯爲64位,但假設我想要編譯只是86,如何避免得到錯誤時拋出?

1)有沒有其他方法可以發現這些進程的路徑?

2)我可以寫一條線,如「你不能從86應用得到64進程路徑」,但我仍然沒有碰上例外。我如何防止這種情況?我可以檢查特定信息的過程,以便我可以替換文本並避免訪問MainModule?

謝謝。

+1

什麼是異常堆棧跟蹤和細節?嘗試構建AnyCPU,而不是x86而不是x64 ...它是如何工作的? –

+1

您是否收到「System.ComponentModel.Win32Exception:無法枚舉過程模塊」?對於在「系統」憑據下運行的進程而言,這通常是正確的,與x86和x64無關。 – Kash

+0

默認情況下,它運行一個活動調試(配置)平臺:活動(x86) 平臺目標:x86 這會生成: 異常:引發:「32位進程無法訪問64位進程的模塊。 (System.ComponentModel.Win32Exception) 拋出了System.ComponentModel.Win32Exception:「32位進程無法訪問64位進程的模塊。」 通過更改爲平臺目標:x64或AnyCPU我沒有得到任何異常。 所以選擇AnyCPU應該沒問題,因爲如果我在我的系統上運行它,它將作爲x64運行,因此它可以訪問x64模塊(如果在x86機器上運行應該可以工作,因爲沒有x64進程)。 – Relok

回答

0

32位進程無法訪問64位進程的模塊。

所以必須對AnyCpu進行編譯才能在x86和x64環境中完全工作。