Перезапустите диспетчер очереди печати в C#
Время от времени мой компьютер запутывается и думает, что принтер отключен. Это не так уж плохо, за исключением того, что Windows не предоставляет простой способ вернуть принтер в оперативный режим. В основном вам необходимо отключить и перезапустить диспетчер очереди печати. Я написал этот пример, чтобы сделать это проще.
При нажатии кнопки «Перезагрузка» программа выполняет следующий код.
// Добавить ссылку на System.ServiceProcess. using System.ServiceProcess; ... private void btnRestart_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; // Остановим спулер. ServiceController service = new ServiceController("Spooler"); if ((!service.Status.Equals(ServiceControllerStatus.Stopped)) && (!service.Status.Equals(ServiceControllerStatus.StopPending))) { lblStatus.Text = "Stopping spooler..."; lblStatus.Refresh(); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped); } // Запустите спулер. lblStatus.Text = "Restarting spooler..."; lblStatus.Refresh(); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); lblStatus.Text = "Done"; Cursor = Cursors.Default; }
Программа использует класс System.ServiceProcess.ServiceController, поэтому этот код упрощает работу, начиная с директивы using System.ServiceProcess. Чтобы использовать это пространство имен, добавьте System.ServiceProcess в ссылки на проект.
Когда вы нажимаете кнопку, код создает новый ServiceController для службы с именем «Spooler». Если спулер в настоящий момент не остановлен или ожидает остановки, код вызывает его Стоп, а затем ждет, пока спулер не остановится.
Теперь, когда спулер остановлен, код вызывает его метод Start и ждет, пока он не будет завершен.