Jak zainstalować drukarkę, która powinna być dostępna z usługi Windows?

1

Moja aplikacja została uruchomiona jako usługa systemu Windows, która nie widzi drukarki zainstalowanej na moim komputerze.
Ale jeśli ta aplikacja zostanie uruchomiona jako zwykła aplikacja systemu Windows, może zobaczyć tę drukarkę.
Jak mogę zainstalować tę drukarkę, która powinna być dostępna z usługi Windows?

Muszę wysłać pliki pdf do tej drukarki z usługi Windows. Ale usługa Windows nie widzi mojej drukarki.
Usługa Windows używa funkcji Win API EnumPrinters, aby uzyskać listę drukarek.
Ponadto funkcja Win API GetDefaultPrinter nie zwraca domyślnej drukarki, jeśli ta funkcja jest wywoływana z usługi systemu Windows.

System operacyjny - Windows 7.
Drukarka - HP LaserJet P2055.
Jest zainstalowany jako drukarka sieciowa na komputerze zdalnym.
Instaluję go na komputerze, wykonując następujące czynności:
1. Otwórz urządzenie i drukarki.
2. Dodaj drukarkę.
3. Dodaj drukarkę sieciową.
4. Znajdź drukarkę w katalogu na podstawie lokalizacji lub funkcji.

Włodzimierz Bezugły
źródło
To pytanie jest niejasne i nie zawiera szczegółowych informacji, aby ktoś mógł odpowiedzieć. Podaj więcej szczegółów na temat tego, która wersja systemu Windows, marka i model drukarki, co dokładnie próbujesz osiągnąć i co badałeś itp. Szczegóły są bardzo pomocne.
CharlieRB
@CharlieRB Dodano pewne szczegóły.
Volodymyr Bezuglyy

Odpowiedzi:

0

Prawdopodobnie uruchamiasz usługę w innym kontekście użytkownika niż podczas interaktywnego działania (jako „normalna aplikacja”). Spróbuj uruchomić go w kontekście użytkownika, który ma zainstalowaną drukarkę:

Usługa systemu Windows przeznaczona do drukowania może używać interfejsów API GDI Win32 do drukowania dokumentów na drukarce. Istnieją jednak pewne uwagi przy drukowaniu z usług Windows. Jeśli wszystkie zadania drukowania można wysłać przy użyciu poświadczeń jednego użytkownika, usługę można uruchomić na koncie tego użytkownika i uzyskać dostęp do drukarek, które są znane temu użytkownikowi na tym komputerze. Jeśli usługa musi drukować przy użyciu poświadczeń jednego lub większej liczby użytkowników zdefiniowanych w czasie wykonywania, usługa musi wywołać LogonUser (), LoadUserProfile () i ImpersonateLoggedOnUser () przed wydrukowaniem.

(cytowany z: http://blogs.msdn.com/b/dsui_team/archive/2013/06/24/printing-from-a-windows-service.aspx )

Możesz także zainstalować drukarkę na całym komputerze (dla wszystkich użytkowników) za pomocą printui.dll , np .:
Add per machine printer connection: rundll32 printui.dll PrintUIEntry /ga /n\\client2\printer2

(uruchom, rundll32 printui.dll,PrintUIEntry /?aby zobaczyć wszystkie opcje)

wmz
źródło