Я хочу, чтобы все имя принтера было установлено на компьютере и в сети. Я использовал эти функции ниже, чтобы получить список всех принтеров. Все эти функции. работает правильно в приложении консоли и формы, и я могу получить список всех принтеров, но когда я пытаюсь использовать эти функции. в службе windows я могу установить только на компьютер без сети. А также мой сервис работает под учетной записью LocalSystem
.Как получить все имя принтера в службе Windows?
Func 1:
WinsPool.PrinterEnumFlags Flags = WinsPool.PrinterEnumFlags.PRINTER_ENUM_CONNECTIONS | WinsPool.PrinterEnumFlags.PRINTER_ENUM_LOCAL;
const int ERROR_INSUFFICIENT_BUFFER = 122;
uint cbNeeded = 0;
uint cReturned = 0;
if (WinsPool.EnumPrinters(Flags, null, 2, IntPtr.Zero, 0, ref cbNeeded, ref cReturned))
{
return null;
}
int lastWin32Error = Marshal.GetLastWin32Error();
if (lastWin32Error == ERROR_INSUFFICIENT_BUFFER)
{
IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);
if (WinsPool.EnumPrinters(Flags, null, 2, pAddr, cbNeeded, ref cbNeeded, ref cReturned))
{
WinsPool.PRINTER_INFO_2[] printerInfo2 = new WinsPool.PRINTER_INFO_2[cReturned];
int offset = pAddr.ToInt32();
Type type = typeof(WinsPool.PRINTER_INFO_2);
int increment = Marshal.SizeOf(type);
for (int i = 0; i < cReturned; i++)
{
printerInfo2[i] = (WinsPool.PRINTER_INFO_2)Marshal.PtrToStructure(new IntPtr(offset), type);
string printerName = printerInfo2[i].pPrinterName;
offset += increment;
}
Marshal.FreeHGlobal(pAddr);
}
lastWin32Error = Marshal.GetLastWin32Error();
}
Func 2:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
string printerName = printer;
}
Func 3:
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Printer");
foreach (ManagementObject queryObj in searcher.Get())
{
string printerName = queryObj["Name"].ToString();
}
«моя служба работает под LocalSystem счетов» - тогда он появится в любых сетевых принтеры, как ваш счет машины - это ваша учетная запись компьютера имеет разрешение на доступ к любому из этих принтеров ? –
yes У меня есть разрешения на доступ ко всем. – mburakerbay
** Вы ** есть, но ваш ** машина **? –