Я знаю, что это сообщение довольно старое, но я боролся с той же проблемой.
я в конце концов удалось решить, и я надеюсь, что приведенный ниже код поможет кому-то:
using(var ds = new DirectorySearcher())
{
ds.SearchRoot = new DirectoryEntry("");
ds.Filter = "(|(&(objectCategory=printQueue)(name=*)))";
ds.PropertiesToLoad.Add("printername");
ds.PropertiesToLoad.Add("portname");
ds.PropertiesToLoad.Add("servername");
ds.PropertiesToLoad.Add("cn");
ds.PropertiesToLoad.Add("name");
ds.PropertiesToLoad.Add("printsharename");
ds.ReferralChasing = ReferralChasingOption.None;
ds.Sort = new SortOption("name", SortDirection.Descending);
using(var src = ds.FindAll())
{
foreach(SearchResult sr in src)
{
Console.WriteLine("------------------------------------");
Console.WriteLine(sr.GetDirectoryEntry().Name);
foreach (DictionaryEntry p in sr.Properties)
{
var propName = p.Key;
var propCollection = (ResultPropertyValueCollection)p.Value;
var propValue = propCollection.Count > 0 ? propCollection[0] : "";
Console.WriteLine(propName);
Console.WriteLine(propValue);
}
Console.WriteLine("------------------------------------");
}
}
}
Если вы хотите вернуть все свойства, чтобы увидеть то, что доступно, то просто закомментируйте ds.PropertiesToLoad линии, и что будет дайте полный список.
Я использовал это, но предоставляю мне только установленный принтер в своей системе. if (Convert.ToBoolean (Принтеры ["Сеть"])) {} // ВСЕ СЕТЕВЫЕ ПРИНТЕРЫ. Это условие не оправдалось. У меня три принтера в mysystem, и из них один из них установлен в моей системе, а другие нет. Теперь я хочу еще двух в этом списке. Как я могу это сделать? – Jankya
вы не можете печатать на принтере, если он не установлен в ваших системах. – Anand
Даже окна не будут загружать имя принтера в список принтеров, если он не установлен. – Anand