Tout d'abord, ce code a fonctionné dans VS2005.Erreur Win32_Printer ManagementObjectSearcher (VS2008 C#)
Le code dans VS2008 se bloque avec une exception UnauthorizedAccessException chaque fois que j'essaie d'enjamber la boucle foreach et d'affecter un objet ManagementObject.
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;
}
StackTrace =
à System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo)
à System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
à AcpClasses.PrinterSpool.GetPrintersCollection() ...
Lorsque j'essaie d'afficher les données dans la fenêtre Variables locales, ces zones semblent immédiatement suspectes:
1. Count - Valeur: "Expiration de la fonction a expiré."
2. IsSynchronized - Value: évaluation de fonction désactivée car une évaluation de fonction précédente a expiré.
3. SyncRoot - Value: évaluation de la fonction désactivée car une évaluation de fonction précédente a expiré.
Comment puis-je essayer de déboguer davantage pour savoir ce qui se passe?
Commentaire: Défini ailleurs est Liste printers = null; Ce code ne fonctionne plus non plus dans Visual Studio 2005 (je viens de vérifier avec une application console qui interroge Win32_Printer uniquement). –
jp2code
J'ai ajouté du code dans ma réponse qui devrait vous aider à diagnostiquer votre problème. –