Child process in c#

martedì 20 dicembre 2005 - 19.58

litograph Profilo | Newbie

Dear all,
sono nuovo in questo forum e spero che qualcuno possa essermi di aiuto su questa mia problematica.
Ho sviluppato un servizio di windows in C# e vorrei creare da questo dei chil process (aventi spazio di memoria separato dal parent process) su una libreria che ora per semplicità chiamo pippo.dll.
Voglio premettere che ho già provato a creare degli AppDomain secondari ma questo non va bene perché il codice della libreria viene copiato nella stessa area di memoria del parent process.
Inoltre non va bene nemmeno usare la classe 'Process' poiché, anche se questa mi crea un vero child process, quest'ultimo viene chiuso se faccio il logoff dell'utente connesso al pc dove risiede il servizio parent process. Insomma questo child process deve essere ancorato al servizio parent process e deve terminare solo se termina il parent process oppure esce lo stesso child process perchè ha terminato la sua esecuzione.
Premetto che il funzionamento che cerco in C# è tipo il CreateProcess() di C++ o il fork() di Unix.
Grazie 1K.

Brainkiller Profilo | Guru

>Dear all,
>sono nuovo in questo forum e spero che qualcuno possa essermi
>di aiuto su questa mia problematica.

Ciao e Benvenuto.

>Ho sviluppato un servizio di windows in C# e vorrei creare da
>questo dei chil process (aventi spazio di memoria separato dal
>parent process) su una libreria che ora per semplicità chiamo
>pippo.dll.
>Voglio premettere che ho già provato a creare degli AppDomain
>secondari ma questo non va bene perché il codice della libreria
>Inoltre non va bene nemmeno usare la classe 'Process' poiché,
>anche se questa mi crea un vero child process, quest'ultimo
>viene chiuso se faccio il logoff dell'utente connesso al pc
>dove risiede il servizio parent process. Insomma questo child
>process deve essere ancorato al servizio parent process e deve
>terminare solo se termina il parent process oppure esce lo stesso
>child process perchè ha terminato la sua esecuzione.
>Premetto che il funzionamento che cerco in C# è tipo il CreateProcess()
> di C++ o il fork() di Unix.

E' un bel quesito il tuo. Da quello che ho capito vorresti avere un servizio Windows e n processi Esterni creati dal processo del servizio che rimangano in piedi con il servizio anche al logoff dell'utente.
Una specie di creazione di processi out-of-process ?
Diciamo che non mi sono mai cimentato in un'implementazione di questo tipo ma non sono neanche così sicuro che si possa fare. Tu sei sicuro che creando dei processi esterni cosi questi rimangano in piedi al logoff ? Il servizio Windows sicuramente, ma sugli altri dubito.

Se sei sicuro un'opportunità è usare nativamente la CreateProcess tramite interoperabilità.
Ma prima di abbracciare questa strada mi documenterei.
Tu che ne pensi ?

ciao



David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

litograph Profilo | Newbie

Ciao, e grazie per la risposta...
ho già usato l'interoperabilità con una classe c++ che effettua il CreateProcess e crea una pipe line con il processo creato, e mi funziona nel modo come ho detto nell'header message, ma questo mi comporta un calo delle performance del sistema che sto realizzando dal momento che esso apre e chiude un numero elevato di processi in 1 sec (~300). E' per questo che facevo richiesta di una possibile implementazione tutta in C# che già ottimizzasse questi meccanismi.
Comunque grazie.


Brainkiller Profilo | Guru

>Ciao, e grazie per la risposta...
>ho già usato l'interoperabilità con una classe c++ che effettua
>il CreateProcess e crea una pipe line con il processo creato,
>e mi funziona nel modo come ho detto nell'header message, ma
>questo mi comporta un calo delle performance del sistema che
>sto realizzando dal momento che esso apre e chiude un numero
>elevato di processi in 1 sec (~300). E' per questo che facevo
>richiesta di una possibile implementazione tutta in C# che già
> ottimizzasse questi meccanismi.
>Comunque grazie.

Non credo proprio che C# ottimizzi una cosa di questo tipo, se mi parli di creazione e distruzione di processi esterni nell'ordine di 300 al secondo è meglio utilizzare C++ e lasciare perdere il C#.

Di fatto però altro non so aggiungere considerato che bisognerebbe consultare meglio la documentazione relativa allo sviluppo di servizi Windows più evoluti che abbiano questa necessità.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

litograph Profilo | Newbie

Ok,
grazie lo stesso David.
Dimenticavo.... Buone feste.

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5