首先,此代碼在VS2005中工作。Win32_Printer ManagementObjectSearcher錯誤(VS2008 C#)
無論何時嘗試跨越foreach循環並分配ManagementObject時,VS2008中的代碼都會崩潰並伴隨UnauthorizedAccessException。
public static List<string> GetPrintersCollection() {
if (printers == null) {
printers = new List<string>();
string searchQuery = "SELECT * FROM Win32_Printer";
try {
using (ManagementObjectSearcher searchPrinters = new ManagementObjectSearcher(searchQuery)) {
ManagementObjectCollection Printers = searchPrinters.Get(); // <= Printers data below
foreach (ManagementObject printer in Printers) { // <= Error Here
printers.Add(printer.Properties["Name"].Value.ToString());
}
}
} catch (UnauthorizedAccessException err) {
Console.WriteLine(err.Message); // the message is an empty string
throw new Exception("PrinterSpool - GetPrintersCollection: You do not have authorization to access this printer.");
} catch (Exception err) {
throw new Exception(string.Format("PrinterSpool - GetPrintersCollection: {0}", err.Message));
}
}
return printers;
}
堆棧跟蹤=
在System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(的Int32的errorCode,IntPtr的errorInfo中)
在System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
在AcpClasses.PrinterSpool.GetPrintersCollection ()...
當我嘗試查看本地窗口中的數據時,這些字段看起來立即可疑:
1.計數 - 值:「功能評估超時。
2. IsSynchronized - 值:功能評估由於先前的功能評估超時而被禁用。
3. SyncRoot - 值:功能評估被禁用,因爲之前的功能評估超時。
我該如何嘗試進一步調試以找出發生了什麼?
評論: 其他地方定義爲列表 printers = null; 此代碼也不再適用於Visual Studio 2005(我剛剛查詢了僅查詢Win32_Printer的控制檯應用程序)。 –
jp2code
2009-10-05 15:20:13
我在回答中添加了一些代碼,可以幫助診斷您的問題。 – 2009-10-05 19:54:15