Newsgroup: it.comp.lang.delphi
Titolo: Delphi 7 Avviare e stoppare servizi

ciao a tutti...volovo chiedervi come è possibile avviare o stoppare un
servizio tramite delphi???
Grazie a tutti!!!!

>ciao a tutti...volovo chiedervi come =E8 possibile avviare o stoppare un
API del Service Control Manager
E per prevenire:
Sě, si puň fare invocando una shell e usando NET START/NET STOP o sc.exe 
(da XP in poi...).
--- posted by geoForum on 
http://www.delphiedintorni.it

Esiste la unit apposita in Delphi
unit cwinsrvc;
Qui un esempio:
http://www.infojet.cz/program/delphi/tips/tip0027.html


Esiste la unit apposita in Delphi
In Delphi non esiste, almeno non di serie. La unit a quella pagina è
stata scritta da una terza parte. In ogni caso, guardando il codice di
interfacciamento al Service Control Manager, mi sembra sia fatto bene.

 interfacciamento al Service Control Manager, mi sembra sia fatto bene.
La sto valutando anch'io: se funziona bene la integrerň nel framework che
sto usando.
-- 
Morde

>interfacciamento al Service Control Manager, mi sembra sia fatto bene.
Io ci aggiungerei però un po' di gestione delle eccezioni... quel codice 
rischia di lasciare degli handle aperti se qualcosa non va per il verso 
giusto :)


 giusto :)
In realtà no, perché lavora sui codici di ritorno, quindi dal codice di
pulizia ci passa comunque, però concordo con te: è buona norma mettere i
rilasci nei finally (non si sa mai che a posteriori si introduca in quelle
funzioni del codice che può sollevare eccezioni).
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 giusto :)
In realtà no, perché lavora sui codici di ritorno, quindi dal codice di
pulizia ci passa comunque, però concordo con te: è buona norma mettere i
rilasci nei finally (non si sa mai che a posteriori si introduca in quelle
funzioni del codice che può sollevare eccezioni). Oltretutto questo
eviterebbe di avere del codice doppio per la chiusura degli handle come
avviene in quel codice.


>In Delphi non esiste, almeno non di serie. 
E' vero intendevo dire che esiste una unit apposta scritta per Delphi.
Trattanosi di una unit non sarebbe più corretto utiizzare finalization ?
Ciao.


 Trattanosi di una unit non sarebbe piů corretto utiizzare finalization ?
No.


>In realtà no, perché lavora sui codici di ritorno, quindi dal codice di
Hai ragione... è che io di solito ho un RaiseLastOSError se una chiamata 
fallisce per non perdere il messaggio di errore, e quindi poi ho dei 
finally per fare pulizia, mentre qui restituisce solo True/False.
Sarebbe anche da incapsulare tutto in una classe TServiceManager... :)


>Trattanosi di una unit non sarebbe più corretto utiizzare finalization ?
Per fare cosa? Initialization e finalization vengono chiamate solo 
all'avviodel programma (e prima che venga eseguito il corpo principale) 
e al termine dello stesso.


e al termine dello stesso.
Per rendere una unit, in pratica, una classe. Cosa obbrobriosa.

 Sarebbe anche da incapsulare tutto in una classe TServiceManager... :)
Sto usando funzioni in questione e funzionano perfettamente: per ragionarci
un po' sopra vorrei chiederti perchč sarebbe meglio incapsulare tutto in
una classe, quando ho la unit che mi fornisce le funzioni :-)
ciao
-- 
Morde

>una classe, quando ho la unit che mi fornisce le funzioni :-)
Perché è più "elegante" (in senso "matematico")? Perché ad esempio avere 
un TEdit quando potresti avere solo una unit e delle funzioni per 
crearlo, settare il testo e leggerlo?
Pensa ad esempio ad un classe:
TServiceManager = class
...
public
  constructor Create(const AServiceName: string);
  procedure Start;
  procedure Stop;
  procedure Suspend;
  property Status: TServiceStatus;
end;
Tutti gli handle, ecc. sono incapsulati all'interno della classe. Non 
c'è bisogno di aprirli e chiuderli ripetutamente finché la classe è 
istanziata, meno parametri da passare, ecc. ecc. Potresti avere una 
lista di servizi da controllare, ognuno assegnato alla sua istanza - 
molto più semplice da manipolare che avere una lista di nomi di servizi 
sui quali chimare una serie di funzioni.
Delphi è un linguaggio object-oriented sofisticato, IMHO a volte vale la 
pena sfruttarlo :)


 una classe, quando ho la unit che mi fornisce le funzioni :-)
Nel 2007 si discute ancora del perché sia meglio avere una classe anziché
lavorare in modo procedurale?


 pena sfruttarlo :)
Assolutamente daccordo, incapsulerò quelle funzioni in un server COM e le
utilizzerò tramite la sua interfaccia. :-)
Ciao e grazie per la risposta.
-- 
Morde

utilizzerò tramite la sua interfaccia. :-)
Server COM????? Spero tu sia scherzando! <g> (a meno che tu non abbia 
buone ragioni per farlo, ovviamente).


Ieri al festival latino americano ho conosiuto una cubana bianca da 7 e 
mezzo.... che tristezza questi argomenti a confronto.... :-D


 buone ragioni per farlo, ovviamente).
Tutto il framework su cui lavoro è basato su server com :-)
-- 
Morde

 mezzo.... che tristezza questi argomenti a confronto.... :-D
Beh avresti potuto intrattenerla con discorsi su procedure, servizi, api di
sistema, ecc... anzichè farla ballare a colpi di bachate e pick-a-buu :-)
-- 
Morde

Mmmm purtroppo non ha smollato il nr. di cell. sono un po' depresso.
Non ho mercedes cabrio. Scusate per piccolo OT, passo e chiudo.
Ciao.
