2012-02-28 13 views
8

Ho un servizio di Windows che deve avviare un processo per inviare un file alla stampante (ho trovato quella soluzione lì https://stackoverflow.com/a/4875755/1228738). Lo faccio usando Process.Start(). Il mio problema è che non succede nulla.Stampa eseguendo un processo in un servizio di Windows

Il servizio è attualmente installato sul mio sviluppatore (win7, x64). Ho provato a installarlo come LOCAL SYSTEM, NETWORK SERVICE, LOCAL SERVICE con lo stesso risultato ogni volta.

ho provato quelle modo di iniziare il mio processo:

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(); 

e

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

e anche

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); 

Quando eseguo lo stesso codice in un'applicazione WinForm, tutto funziona bene, il file viene inviato alla stampante. Ma nel servizio di Windows, non succede nulla.

Ho visto quel post https://stackoverflow.com/a/6271309/1228738, che spiega perché non vedrei l'interfaccia utente, va bene non ho alcuna interfaccia utente comunque. Ma come detto nella sezione commenti, un processo senza input dell'utente dovrebbe essere OK. Il processo che avvio non ha bisogno di alcun input da parte dell'utente.

L'unica cosa che posso pensare al momento, è che a causa dell'isolamento della sessione (https://stackoverflow.com/a/5063750/1228738), il servizio non riesce a trovare le stampanti installate ... Può essere così? Se è così, qualche suggerimento su come aggirare questo? E se no, qualche idea di cosa c'è che non va?

Grazie!

EDIT # 1

ho provato a fare funzionare il servizio con il mio account utente, e sta funzionando, quindi credo che i miei timori sono confermati ... il sistema locale e SERVIZIO DI RETE utenti non hanno le stampanti installate.

Quindi perfezionerò la mia domanda un po '. C'è un modo per questi account di accedere alle stampanti installate sul computer?

EDIT # 2

abbiamo finalmente deciso che un utente verrà creato per l'esecuzione di tale servizio e in che gli account utente faremo installare la stampante su cui stampare.

Immagino che questa domanda possa essere chiusa ora. Grazie a tutti per il vostro aiuto.

+0

Potrebbe essere perché l'applicazione sta tentando di mostrare la finestra di dialogo di stampa ma la sessione non è interattiva (controllare il registro eventi dell'applicazione) o potrebbe essere, come suggerito, perché l'utente il servizio viene eseguito come non ha stampanti configurato. È possibile accedere come utente che esegue il servizio come (se possibile) e configurare le stampanti. –

+0

Quando eseguo esattamente lo stesso codice in un'applicazione winform, il file viene inviato alla stampante senza la finestra di dialogo di stampa, quindi mi aspetto lo stesso comportamento dal servizio. Proverò qualcosa di simile a ciò che suggerisci, ed eseguirò il servizio con il mio account utente, e vedrò se funziona in questo modo. Grazie anche – Fid

+0

, dove si trova myFile.pdf? Il servizio ha accesso a quel percorso? – roymustang86

risposta

0

Dai un'occhiata a questo MSDN Pagina: http://support.microsoft.com/kb/324565

Secondo questa pagina, non è possibile stampare da pagine ASP.NET o servizi di Windows utilizzando .NET.

+2

Grazie per il collegamento, ma non penso che si applichi alla mia situazione. Non sto usando le classi di .NET Framework Printing per la stampa. Sto appena iniziando un .exe che accetta un argomento che gli dice di stampare il documento. – Fid

0

La soluzione qui è tho condividere la stampante locale e chiamare Foxit con

-/t yourfile.pdf \\localhost\YourSharedPrinter

In questo modo il servizio non ha bisogno di un UserProfile e non DefaultPrinter.

3

ho avuto questo problema anche questo trucco risolto

Vai a servizi ---> Fare doppio clic sul servizio richiesto ---> passare alla scheda Accesso

Alimentare il Log-nelle credenziali da cui la stampante è stata installata.

Eseguire il servizio, quindi controllare la coda della stampante.

Motivo: l'account di sistema locale non dispone di quelle stampanti installate!

Vedere la schermata qui sotto.

Problemi correlati