Как я могу перечислить все доступные драйверы принтера, такие как Мастер установки принтера в C #? - PullRequest
6 голосов
/ 20 марта 2012

Вполне может быть, что мне нужно написать что-то слишком сложное для этого, и что нет обычного способа сделать это, но:

Как я могу получить список всех доступных драйверов принтера так же, какмастер добавления принтеров работает, когда отображает их по производителю, а затем по принтеру?Мне в основном нужен пользовательский диалог добавления принтера, и без этого я немного напичкан;)

Вот так: (игнорируйте стрелку, заимствованное изображение)

enter image description here

Мне также нужен путь к INF-файлу, обозначенному драйверами в списке.

РЕДАКТИРОВАТЬ: немного фона:

Я пытаюсь добавить принтер, вызвав добавить принтермастер (с повышенными привилегиями) в сеансе TS, добавляющий принтер в правильный порт TS и затем пытающийся сохранить информацию для этого принтера, чтобы при входе в систему пользовательский принтер добавлялся автоматически на основе значений, которые я сохранил.

До сих пор я не смог найти способ получить информацию о драйвере (предпочтительно фактический путь к INF-файлу для этого драйвера принтера, так как тогда я могу использовать PrintUI для установки принтера) последобавление принтера.

Поэтому я прибегаю к пользовательскому диалоговому окну, соответствующему драйверу принтера.Поскольку инструмент используется только при первоначальной установке принтера и только администраторами, я не против иметь дополнительный диалог, в котором вы выбираете драйвер во второй раз, чтобы сохранить информацию.

РЕДАКТИРОВАТЬ: Ориентация на Windows Server2008 R2 (Win32_PrinterDriver не работает)

1 Ответ

3 голосов
/ 20 марта 2012

Вы можете запросить у WMI информацию о драйверах принтера, которые используются в данный момент.Класс Win32_PrinterDriver подробно описывает доступные свойства.Вы можете использовать классы в System.Management Namespace для выполнения запросов.

SelectQuery selectQuery = new SelectQuery("Win32_PrinterDriver");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);

foreach (ManagementObject printerDriver in searcher.Get()) 
{
    // Your code here.
}

Вы можете получить доступ к свойствам путем их индексации, то есть printerDriver["DriverPath"].

Также см. Раздел Запросы WMI в MSDN.

На интересном примечании Microsoft с тех пор добавила командлет Get-PrinterDriver в некоторые версии PowerShell (в Windows10 и т. Д.), Что делает нечто похожее на приведенный выше код.

ОБНОВЛЕНИЕ: я просматривал старые вопросы и обнаружил проект DriverStoreExplorer на GitHub.В коде много всего, что перечисляет все драйверы принтера, поэтому воспроизводить его здесь не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...