Перезапустите диспетчер очереди печати в 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 и ждет, пока он не будет завершен.
