2012-02-28 15 views
8

Tengo un servicio de Windows que necesita iniciar un proceso para enviar un archivo a la impresora (encontré esa solución allí https://stackoverflow.com/a/4875755/1228738). Lo hago usando Process.Start(). Mi problema es que no pasa nada.Impresión mediante la ejecución de un proceso en un servicio de Windows

El servicio está realmente instalado en mi máquina de desarrollador (win7, x64). Intenté instalarlo como LOCAL SYSTEM, NETWORK SERVICE, LOCAL SERVICE con el mismo resultado cada vez.

Me trataron los manera de empezar mi proceso:

Process p = new Process(); 
p.StartInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe"; 
p.StartInfo.Arguments = "-p myFile.pdf"; 
p.Start(); 

y

Process.Start("C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe", "-p myFile.pdf"); 

y también

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe"; 
startInfo.Arguments = "-p myFile.pdf"; 

Process.Start(startInfo); 

cuando ejecuto el mismo código en una aplicación WinForm, todo funciona bien, el archivo se envía a la impresora. Pero en el Servicio de Windows, no pasa nada.

Vi esa publicación https://stackoverflow.com/a/6271309/1228738, lo que explica por qué no vería la IU, está bien, de todos modos, no tengo UI. Pero como se dijo en la sección de comentarios, un proceso sin intervención del usuario debería estar bien. El proceso que comienzo no necesita ninguna entrada del usuario.

Lo único que se me ocurre en este momento es que, debido al aislamiento de la sesión (https://stackoverflow.com/a/5063750/1228738), el servicio no puede encontrar impresoras instaladas ... ¿Puede ser así? Si es así, ¿alguna sugerencia sobre cómo solucionarlo? Y si no, ¿alguna idea de lo que está mal?

Gracias!

editar # 1

Me trataron de ejecutar el servicio con mi cuenta de usuario, y está funcionando, así que supongo que mis temores se confirmaron ... los usuarios del sistema local y servicio de red tienen ninguna impresora instalada.

Así que voy a refinar mi pregunta un poco. ¿Hay alguna forma de que esas cuentas accedan a las impresoras instaladas en la computadora?

editar # 2

finalmente decidimos que un usuario se creará para el funcionamiento de ese servicio y en el que las cuentas de usuario vamos a instalar la impresora en la que desea imprimir.

Supongo que esta pregunta se puede cerrar ahora. Gracias a todos por su ayuda.

+0

Podría ser porque la aplicación intenta mostrar el diálogo de impresión pero la sesión no es interactiva (compruebe el registro de eventos de la aplicación) o podría ser, como sugiere, porque el usuario ejecuta el servicio como no tiene impresoras configurado. Puede iniciar sesión mientras el usuario ejecuta el servicio (si es posible) y configurar impresoras. –

+0

Cuando hago exactamente el mismo código en una aplicación winform, el archivo se envía a la impresora sin el cuadro de diálogo de impresión, por lo que esperaría el mismo comportamiento del servicio. Probaré algo similar a lo que sugieres, y ejecutaré el servicio con mi cuenta de usuario, y veré si funciona de esa manera. Gracias – Fid

+0

también, ¿dónde se encuentra myFile.pdf? ¿El servicio tiene acceso a esa ruta? – roymustang86

Respuesta

0

Control hacia fuera este MSDN Página: http://support.microsoft.com/kb/324565

Según esta página, no se puede imprimir desde las páginas ASP.NET o servicios de Windows utilizando .NET.

+2

Gracias por el enlace, pero no creo que se aplique a mi situación. No estoy utilizando las clases de impresión de .NET Framework para la impresión. Estoy comenzando un .exe que toma una discusión diciéndole que imprima el documento. – Fid

0

La solución que aquí se comparten aunque su impresora local y llamar Foxit con

-/t yourfile.pdf \\localhost\YourSharedPrinter

De esa manera su servicio no necesita un PerfilUsuario y sin DefaultPrinter.

3

Tenía este problema también, este truco resuelto

Ir a los servicios ---> doble clic en el servicio requerido ---> proceder a la pestaña de inicio de sesión

de Suministro la credenciales de acceso desde el cual impresora fue instalada.

Ejecute su servicio, luego verifique la cola de la impresora.

Motivo: ¡La cuenta del sistema local no tiene esas impresoras instaladas!

Vea la captura de pantalla a continuación. enter image description here

Cuestiones relacionadas