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)