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

Источник: http://csharphelper.com/blog/2016/01/restart-the-print-spooler-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector