Newsgroup: it.comp.lang.delphi
Titolo: File in esecuzione sul server

Ciao a tutti,
     c'e' un modo per sapere da un pc locale in una rete se sul server e' 
stato lanciato un determinato file (prova.exe, non fa niente e' una form 
vuota).
In pratica sul server lancio prova.exe (form vuota) e dal remoto lancio 
test.exe.
Da test.exe controllo se tra i processi del server c'e' prova.exe, se c'e' 
visualizzo una label con "lanciato" altrimenti "non lanciato".
Tutto quello che ho trovato sui vari siti, fino ad ora, e' come controllare 
un processo sul pc dove si lavora, ma niente per il server o per i remoti.
Grazie a tutti per la pazienza !!!
Ciao, Daniele 
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4562 (20091101) __________
The message was checked by ESET NOD32 Antivirus.
http://www.eset.com

 vuota).
Io userei i socket per fare una cosa del genere..con un programmino che 
resta in ascolto su una determinata porta (ES: 41001) e il client prova 
a chiamare se risponde come mi aspetto il programma ï¿œ in esecuzione. 
Componenti da usare: TServerSocket e TClientSocket
^_Goblin_^

 vuota).
A che pro?
A.

 Componenti da usare: TServerSocket e TClientSocket
E' quello che sto cercando di fare..... grazie !!!!
Ciao, Daniele
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4563 (20091101) __________


 A che pro?
Cerco di spiegare cosa sto cercando di fare per evitare che un utente (o 
meglio uno stesso login) esegua da piu' postazioni lo stesso programma 
limitando a n utenti l'esecuzione del programma.
Il programma e' sempre il solito programma che gira su server lanciato dai 
suoi collegamenti posti sui diversi desktop.
Spero di non fare confusione .....
Quando si lancia il programma, dopo il login verifica se il nome appena 
loggato e' presente nel db degli utenti collegati, se non c'e' si aggiunge 
un record alla tabella. Se c'e' il programma avvisa che il tale utente ha 
gia' lanciato l'applicazione dal pc <nome pc>.
Ua volta aggiunto il record alla tabella controllo se il numero dei record 
presenti e' maggiore di quelli consentiti, se e' cosi' appare un avviso che 
il numero massimo e' stato raggiunto e il programma termina cancellando il 
record dalla tabella.
Alla fine del lavoro, quando il programma si chiude, viene cancellato il 
record di riferimento a quell'utente dalla tabella precedente.
Se tutto fila liscio alla fine quella tabella non ha mai record perche' 
vengono creati e cancellati.
Se pero' un pc viene resettato, spento o manca la corrente e il gruppo di 
continuita' ha le batterie esautite, il record (o i records) di quella 
tabella non vengono cancellati lasciando false informazioni.
Cosi' per evitare questa situazione ho pensato di lanciare un programma che 
monitorizza lo stato delle connesisoni in questo modo:
Il programma ha un TServerSocket e sta in attesa su una porta (per esempio 
41001), quando dai desktop remoti lanciano il programma, questo cerca di 
connetersi tramite un TClientSoket, se la connessione avviene il programma 
continua altrimenti no.
Nel monitor c'e' un timer che ogni minuto interroga tutti i client 
collegati, quello che non risponde si presume caduto e, se c'e' il record 
nel db provvede ad eliminarlo.
Se e' il server che e' caduto sono cadute tutte le connessioni e il monitor 
controlla se ci sono record, se si li cancella tutti e si riparte da zero.
Sono certo che esiste una soluzione piu' pulita e professionale che mi sta 
sfuggendo e che sbatendoci la testa un giorno trovero'.
Aspetto la tua risposta con i consueti suggerimenti di come arrivare a quel 
giorno in tempi abbastanza brevi ...
Scusa la lungaggine
Ciao
Daniele 
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4563 (20091101) __________


considera una situazione di un server e di tre client di cui due
desktop e un portatile. cade l'energia elettrica il server continua a
funzionare i due pc e lo switch si spengono, il server prova ad
interrogare il portatile non lo raggiunge e lo scarta dalla lista,
come farà la procedura sul client ad essere informata di essere stata
esclusa? non credo che la strada del db sia quella che ti porterà al
paradiso, ciao Brunello

 sfuggendo e che sbatendoci la testa un giorno trovero'.
La tua soluzione ï¿œ ottima, anche io farei cosï¿œ.
Continua su questa strada.
ciao
-- 
Morde

 esclusa?
Ogni client tenterï¿œ di scrivere sul db, e se questi ï¿œ offline perchï¿œ la 
rete ï¿œ down, il client gestirï¿œ l'eccezione come in tutte le altre 
situazioni previste.
Questo non dipende di certo dal modo in cui scrivi il programma.
Un'architettura basata su scambi di messaggi via socket tra client 
server mi sembra sia una buona soluzione ed esclude tutti i problemi di 
race conditions derivati da una logica file sahred su cartella 
condivisa.
Immagina di basarti su un file condiviso piuttosto che da una tabella 
di accessi.. sarebbe un casino dover gestire tutte le eccezioni.
-- 
Morde

io penso che la soluzione più semplice che ogni operazione del client
sia preceduta da un invio dell'ip del client alla procedura di
autenticazione sul server il quale dopo le verifiche (numero di
connessioni, terminale ecc) risponde con un ok se possibile,
altrimenti nega l'operazione e la procedura sul client  a quel punto
può gestire se chiudere l'esecuzione o altri possibilità previste in
fase di progetto dell'applicativo. Ciao Brunello

 fase di progetto dell'applicativo. Ciao Brunello
Anche questa ï¿œ una buona soluzione, salvo il fatto che ritarderebbe le 
scritture, ma a questo punto da qualche parte devi pur pagare il prezzo 
di avere un'architettura di rete a stella.. dove tutti chiedono al 
server e lui autorizza ogni volta.
Ciao
-- 
Morde

 limitando a n utenti l'esecuzione del programma.
Piuttosto ch aaiutarti ad implementare una soluzione potenzialmente
errata, in termini di principio, vorrei sapere che cosa ti porta ad
imporre questa limitazione. Perch� vuoi impedire che pi� utenti si
collegano? non credi che sei i tuoi utenti continuano ad usare il
programma da pi� postazioni abbiano effettivamente bisogno di questa
funzionalit�?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it