ManagementObject.InvokeMethod не найдено исключение
Я пытаюсь приостановить задание печати, используя WMI, ManagmentObjects и стандартные образцы кода для этого случая, но получаю ошибку, когда я пытаюсь вызвать метод паузы.
public static bool PausePrintJob(string printerName)
{
//var scope = new ManagementScope("root\\cimv2");
//scope.Connect();
bool isActionPerformed = false;
string searchQuery = "SELECT * FROM Win32_PrintJob";
ObjectQuery query = new ObjectQuery(searchQuery);
ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(/*scope,*/ query);
ManagementObjectCollection prntJobCollection = searchPrintJobs.Get();
if (prntJobCollection.Count > 0)
System.Windows.Forms.MessageBox.Show("Print jobs founded for " + printerName);
foreach (ManagementObject prntJob in prntJobCollection)
{
string jobName = prntJob.Properties["Name"].Value.ToString();
System.Windows.Forms.MessageBox.Show("Job Name: " + jobName);
//Job name would be of the format [Printer name], [Job ID]
char[] splitArr = new char[1];
splitArr[0] = Convert.ToChar(",");
string prnterName = jobName.Split(splitArr)[0];
string jobID = jobName.Split(splitArr)[1];
string documentName = prntJob.Properties["Document"].Value.ToString();
System.Windows.Forms.MessageBox.Show("Document Name: " + documentName);
if (String.Compare(prnterName, printerName, true) == 0)
{
if (printerName.Equals(prnterName))
{
System.Windows.Forms.MessageBox.Show("Pause calling...");
prntJob.InvokeMethod("Pause", null);
isActionPerformed = true;
}
}
}
return isActionPerformed;
}
Я пробовал это с | без объема - результат тот же.
Исключение составляет
У меня нет опыта работы с ManagmentObjects. Хорошо, может быть, текущая логика не идеальна, и я должен использовать Win 32 API-вызовы, чтобы сделать это, как было дано в ответе на этот вопрос: Как приостановить Win32_printJob от Printername и JobID
но я запутался.
Как я читал на MSDN этот метод должен быть. https://msdn.microsoft.com/en-us/library/aa394370(v=vs.85).aspx
Имя класса, которое вернул prntJob.ClassPath.ClassName - Win32_PrintJob.
Кто-нибудь может объяснить или получить некоторые ссылки, чтобы прочитать о том, что может быть проблемой в этой ситуации? Как это работает? Как среда выполнения ищет методы в переносе ManagmentObject? Это правильный способ вызова членов через ManagmentObject? Есть ли в мире инструменты для отладки этого стека?