Usare printto senza aprire finestre

mercoledì 21 maggio 2008 - 11.32

jacques Profilo | Newbie

Ciao a tutti.

Ho il seguente problema con del codice che deve essere eseguito come servizio (quindi non deve attivare delle finestre): carico il processo, segnalo come "filename" il file da stampare, imposto come "verb" il valore printto, infine setto la variabile "UseShellExecute" a false per non aprire la finestra.
Il risultato è una exception "L'eseguibile specificato non è un'applicazione Win32 valida."

Se però cambio il valore "UseShellExecute" a true ed eseguo il tutto dal debugger, allora il programma funziona. L'inconveniente è che stampando un documento word, per un attimo appare la finestra di word (come quando un utente fa "stampa" su un file .doc).

Dovendo usare il programma come servizio, però, non posso lasciare aperta la finestra (ho già provato e il servizio si blocca al momento della stampa).

Qualcuno mi sa dire dove sto sbagliando?

Questo è il mio codice:
Dim ShellProcess As New System.Diagnostics.Process ShellProcess.StartInfo.FileName = FileName ShellProcess.StartInfo.Arguments = Chr(34) & Arguments & Chr(34) ShellProcess.StartInfo.Verb = "printto" ShellProcess.StartInfo.CreateNoWindow = True ShellProcess.StartInfo.UseShellExecute = False ShellProcess.Start()

Grazie mille

Teech Profilo | Expert

Io, per una cosa simile (non un servizio però) ho utilizzato questo genere di codice.

Dim MyProcess As New Process MyProcess.StartInfo.CreateNoWindow = True MyProcess.StartInfo.Verb = "Print" MyProcess.StartInfo.FileName = NomeFile MyProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden MyProcess.Start() MyProcess.WaitForExit(7000) Try MyProcess.CloseMainWindow() Catch ex As Exception Finally MyProcess.Close() End Try

Praticamente nascondo la finestra e chiudo l'applicazione forzatamente attraverso un TimeOut se la stessa non si chiude "autonomamente"... Non è elegante ma funziona...
Altre soluzioni non ne ho trovate perchè il problema nasce dal fatto che ogni applicazione si comporta a modo suo...
Inoltre, se è un servizio, ti consiglio di utilizzare il Verbo "Print" (userà la stampante predefinita) del PC sul quale il servizio gira... Come controllare la stampante non lo so proprio...

Ciao!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

jacques Profilo | Newbie

I problema è proprio l'apertura della finestra.
Se lavoro come "applicazione", allora funziona anche il mio metodo (con printto anzichè print puoi impostare la stampante).

Se però stampo un word, allora il programma apre word, stampa e chiude. Questo funziona finchè uso il programma come applicazione. Mentre se vado come servizio, il programma si blocca (i servizi non possono aprire le finestre)

Teech Profilo | Expert

Ma lasciando la UseShellExecute a True (che non è la finestra) e mettendo l'accrocchio di controllo di chiusura come ho postato sopra non funziona?
Ipotizzo che alcuni programmi tipo Word necessitano della finestra aperta per funzionare... Indicativo il fatto che si apre anche se stampi un file dall'explorer con tasto dx - Stampa...

Ciao!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5