Como instalar a impressora que deve ser acessível pelo serviço do Windows?

1

Meu aplicativo começou como um serviço do Windows que não vê a impressora instalada no meu PC.
Mas se esse aplicativo for iniciado como um aplicativo normal do Windows, ele poderá ver essa impressora.
Como posso instalar esta impressora, que deve ser acessível a partir do serviço do Windows?

Eu preciso enviar arquivos pdf para esta impressora de um serviço do Windows. Mas o serviço do windows não vê minha impressora.
O serviço do Windows usa uma função da API do Win EnumPrinters para obter a lista de impressoras.
Além disso, a função Win API GetDefaultPrinter não retornará a impressora padrão se esta função for chamada de um serviço do Windows.

OS - Windows 7.
Impressora - HP LaserJet P2055.
Ele é instalado como impressora de rede em um computador remoto.
Eu instalo no meu PC usando os seguintes passos:
1. Abra dispositivos e impressoras.
2. Adicione uma impressora.
3. Adicionar uma impressora de rede.
4. Localize a impressora no diretório, com base na localização ou no recurso.

    
por Volodymyr Bezuglyy 04.04.2014 / 12:06

1 resposta

0

Provavelmente você está executando o serviço em contextos de usuários diferentes de quando é executado interativamente (como um 'aplicativo normal'). Tente executá-lo no contexto de um usuário que tenha uma impressora instalada:

A Windows service that is designed to print can use the Win32 GDI APIs to print documents to a printer. There are some considerations when printing from Windows services, however. If all the print jobs can be sent with one user's credentials, the service can be run under that user's account and will have access to the printers that are known to that user on that computer. If the service must print using the credentials of one or more users defined at run time, then the service must call LogonUser(), LoadUserProfile(), and ImpersonateLoggedOnUser() before printing.

(citado em: link )

Você também pode querer instalar a sua impressora em todo o computador (para todos os usuários) usando printui.dll , por exemplo,:% Add per machine printer connection: rundll32 printui.dll PrintUIEntry /ga /n\client2\printer2

(execute rundll32 printui.dll,PrintUIEntry /? para ver todas as opções)

    
por 04.04.2014 / 16:35