Problema com o Windows Service e impressoras de rede

1

Eu tenho um aplicativo de serviço do Windows que de vez em quando deve imprimir alguns documentos. Tanto quanto sei, para imprimir esses documentos, meu serviço deve ser executado com uma conta de usuário diferente de Serviço Local ou Serviço de Rede. Então, criei uma conta de usuário e adicionei isso ao grupo Administradores e executei o serviço com ela.

Com impressoras instaladas localmente, não tenho problemas porque essas impressoras são automaticamente instaladas para todas as contas. Para poder imprimir com as impressoras de rede, criei outro aplicativo que sincroniza as impressoras instaladas do usuário atualmente conectado com a conta de usuário que meu serviço usa com o comando printU.dll, rundll32.exe printUIEntry.

No Vista e no Windows7, não tenho problemas com a sincronização das impressoras, pois toda vez que uma impressora for instalada, a janela de autenticação será aberta e ela solicitará a conta de usuário apropriada para instalar a impressora. não é criada nos computadores de impressoras de rede) mas no XP uma caixa de diálogo de localização com a legenda "Conectando a {printername}" será exibida e deixará de responder ou, às vezes, instalará a impressora, mas sempre que tentar imprimir, uma Win32Exception com " Uma chamada StartDocPrinter não foi emitida "a mensagem será lançada e, na conta do usuário que executa o aplicativo de sincronização, uma impressora duplicada será mostrada e não será possível excluir essas impressoras, a menos que seja forçada (usando o registro).

Estou fazendo a coisa certa para imprimir documentos com o Windows Services? Se sim, como posso resolver o problema acima mencionado? E se não, o que diabos eu devo fazer?

Obrigado.

    
por mrtaikandi 15.09.2009 / 13:04

4 respostas

0

Eu resolvi o problema solicitando uma autenticação de rede para o servidor primeiro e depois instalando a impressora.

Obrigado pela ajuda.

    
por 16.10.2009 / 11:34
1

Você pode fazer logon no computador como contas de usuário do serviço e adicionar / configurar / testar impressoras de rede manualmente.

    
por 15.09.2009 / 15:35
1

Por que não configurar todas as impressoras com uma fila local, assim elas são sempre impressoras locais e você não tem o problema?

Você pode apontar uma fila local para uma impressora de rede criando uma porta local com o endereço IP relevante da impressora. (Vá até o assistente Adicionar Impressora, Adicionar uma Impressora Local (não deixe o plug-and-play da pesquisa), Criar uma Nova Porta, Usar Porta TCP / IP Padrão.

    
por 30.09.2009 / 11:46
0

Eu acho que você pode estar fazendo um trabalho desnecessário aqui. Se você instalar as impressoras com a chamada "conexão por máquina", a impressora estará disponível para todos os usuários e serviços nessa máquina. Eu sei que nós imprimimos do Tomcat rodando como um serviço dessa maneira. Advertência: não tenho 100% de certeza de que isso funciona para a conta de serviço local.

Parece que você já conhece o PrintUI.dll Guia do usuário e referência do PrintUI.DLL

As partes salientes:
rundll32 printui.dll PrintUIEntry / em / n \ machine \ printer
-ou-
rundll32 printui.dll PrintUIEntry / if / f% windir% \ inf \ ntprint.inf / r "lpt1:" / m "HP PSC 500"

Fazer isso da maneira que você descreve pode criar um enfraquecimento desnecessário de sua segurança. Os serviços devem ser executados com as permissões mínimas necessárias para realizar seus trabalhos. Quando você os executa em uma conta de usuário, você pode inadvertidamente dar inadvertidamente privilégios de serviço que não deveria ter.

    
por 07.05.2010 / 00:14