Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Lancio processi da Window Service ;-(
mercoledì 17 dicembre 2008 - 11.58
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 11:58
Ciao a tutti..so che qui non è il posto idele per questo messagigo ma non ho visto la sezione adatta.
Ho creato un servizio windows che monitora i file .bat una directory..
appena viene creato un nuovo file o modificato questa applicazione dovrebbe lanciarlo.
ho fatto questa prova:
gli eventi created, renamed e modified dell'oggetto FileSystemWatcher
private void LanciaBatch(string filename)
{
if (File.Exists(filename))
{
Process.Start(filename);
}
}
nella directory che monitoro ho messo un semplice file .bat con all'interno la riga "notepad.exe"
ora succede che lui riesce a lanciare il .bat e nel taskk manager vedo il nuovo processo notepad.exe con 0 di cpu ma non vedo la finestra.
ho provato a fare anche una semplice applicazione che scrive "ciao" in un file di testo.
se ci faccio doppio clic, funziona e scrive il file..se inserisco la riga di comando nel file .bat nella direcory monitorata, non succede nulla ..
cosa sbaglio?
la stessa istruzione epr lanciare un processo mi funziona ad un'applicazione windows form.. perchè qui no, e come posso ovviare?
Vincenzo
Programmatore sbilenco
19018
Profilo
| Expert
502
messaggi | Data Invio:
mer 17 dic 2008 - 12:17
Non ti solleva nessuna eccezione??
forse è un problema di permessi...non mi viene altro in mente adesso che possa causarti questo problema.
ciao
Stefano Passatordi
http://blogs.dotnethell.it/stem/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 12:28
no..nessuna eccezione..
ho provato a cambaire la routine precedente in
private void LanciaBatch(string filename)
{
if (File.Exists(filename))
{
Process p = new Process();
p.StartInfo.FileName = filename;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.Start();
}
}
la cosa strana è che il processo nel task manager lo vedo solo nella scheda processi e non in applicazioni e tra l'altro se cerco di terminare il processo manualmente mi dice accesso negato, anche se interrompo il servizio e lo disistallo.. niente da fare...
e poi mi rimane anche in processi il comando cmd.exe sempre con l'impossibilità di eliminarlo..
nel pc dove lavoro ho i privilegi di amministrazione...
non so proprio dove sbattere la testa...
Vincenzo
Programmatore sbilenco
19018
Profilo
| Expert
502
messaggi | Data Invio:
mer 17 dic 2008 - 12:32
prova con
StartInfo.CreateNoWindow = false;
ciao
Stefano Passatordi
http://blogs.dotnethell.it/stem/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 12:47
niente da fare..non cambia nulla..
leggevo questo articolo però:
http://bytes.com/groups/net-c/237206-process-start-windows-service
nel mio scarso inglese mi par di capire che la process lancia il programma secondo la sua visibilità in parole poco ortodosse..
ma non riesco a capire allora quale possa essere la soluzione
Vincenzo
Programmatore sbilenco
19018
Profilo
| Expert
502
messaggi | Data Invio:
mer 17 dic 2008 - 14:43
Ecco la soluzione che funziona :
"This because the Service runs in the context of a non interactive desktop,
if you start another process froms this parent process, the child will run
in the same non visible desktop.
What you could do (but I hate the idea because it opens a security hole as
big as the Ozon hole), is to set the service to interact with the desktop."
rendi il servizio capace di interagire con il desktop :
1. Start from the Computer Management console. (My Computer -- right click --> Manage)
2. Find your service under the "Services" node.
3. Right click and go to Properties.
4. At the Log On tab, check the box "Allow Service to Interact with Desktop" and Apply
5. Restart Service
ciao
Stefano Passatordi
http://blogs.dotnethell.it/stem/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 15:29
sinceramente non ci capisco nulla..tra l'altro non lo vedo nella lista dei servizi anche se viene avviato normalmente con windows e col net start...
e stoppato tranquillamente con net stop..
leggevo che le cose si possono cambaiore con il ServiceController inpostando la prorpieta ServiceType a InteractiveProcess..
ma dove la imposto? e come uso la Start? non trovo alcun esempio in merito.
cmq...in parte risolto il problema..quello di lanciare il bat che a sua volta lancia un eseguibile che scrive il file mi va bene ora, il problema era nello spazio di una directory..
però non capisco perchè anche se il programma termina nel task manager mi rimane il processo cmd.exe..
e come lo elimino? dal bat come faccio a capire che l'eseguibile è cambiato?
Vincenzo
Programmatore sbilenco
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 16:40
ok..perfetto..molto bovinamente cercavo nel nome il nameservice..invece era la descizione..
per cui allego immagine di come settarlo:
736x538
82Kb
e udite udite..anche i processi lanciati terminano normalmente e non ne rimane nessuno appeso..
ma un'ulteriore domanda prima di accettare la risposta..
è possibile settare questa prorpietà perdefault del servizio in fase di avvio o istallazione?
Vincenzo
Programmatore sbilenco
19018
Profilo
| Expert
502
messaggi | Data Invio:
mer 17 dic 2008 - 16:42
Prova questo ->
http://www.codeproject.com/KB/install/cswindowsservicedesktop.aspx
ciao
Stefano Passatordi
http://blogs.dotnethell.it/stem/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 17 dic 2008 - 17:38
che dire..non perfetto ma perfettissimo...
grazie mille..mi sei stati di enorme aiuto.. sono in debito..
ciao
Vincenzo
Programmatore sbilenco
Torna su
Stanze Forum
Elenco Threads
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 !