Al di là del fatto che in genere i servizi si scrivono come applicazioni console (e quindi con il main classico), il punto è che da lì ti devi subito mettere in comunicazione con il service control manager, richiamando la StartServiceCtrlDispatcher; a tale funzione passi un array di strutture che contengono la coppia "nome servizio"-funzione ServiceMain (ogni processo può contenere più servizi).Originariamente inviato da Salvy95
ma una WINAPI WinMain non gli basta?
La funzione ServiceMain, a sua volta, fa da "main" per ciascun servizio, e deve a sua volta registrare la funzione che riceverà le richieste del SCM (avvia servizio, pausa servizio, stop servizio, ...). Registrata questa funzione, deve riportare lo stato del servizio al SCM e non ritornare fino a quando il servizio non si deve spegnere (in genere si fa tramite un Event azionato all'interno della funzione appena registrata e una WaitForSingleObject).
La funzione registrata riceve tutta una serie di eventi dal SCM; la funzione in questione deve essere "veloce" (ovvero, fare il minimo lavoro indispensabile in risposta agli eventi), il lavoro vero e proprio del servizio dovrebbe essere fatto da altri thread, con cui la funzione comunica (brutalmente avviandoli/arrestandoli o con meccanismi più sofisticati).
I servizi sono delle applicazioni piuttosto particolari (e non troppo semplici da scrivere), perché devono collaborare con il Service Control Manager e gestire diverse cose in maniera asincrona. Prima di imbarcarti nella scrittura di un servizio leggiti attentamente la relativa documentazione su MSDN e accertati di conoscere a sufficienza la programmazione Win32, non è roba che si improvvisa dal nulla.Quanto sono esigenti questo servizi! =/
Masochismo, semmai... ma comunque anche se .NET ti libera da un po' di "boilerplate code" i concetti di fondo dei servizi sono sempre lì e sono sempre ostici... un servizio Win32, in qualunque linguaggio tu lo scriva, ha comunque questa particolare struttura, e un funzionamento diverso da quello di altri generi di applicazione.Originariamente inviato da Freax
ma non faresti prima ad imparare il C# visto che comunque usi un linguaggio come il C/C++ per 1 piattaforma e trovi anche difficoltà, tanto vale passare al C# e al .Net Framework; so che è una cosa buttata li, ma onestamente usare un linguaggio del genere per cose che oramai in linguaggi ad alto livello richiedono poche righe ( non solo in C#, anche Python per dirti ), mi sembra solo un atto di sadismo.
Comunque, sul linguaggio alto livello/basso livello, tutto dipende dal problema che si deve risolvere... non esistono tool universali, bisogna saper scegliere cosa conviene a seconda dei casi.
Poteva sicuramente essere più chiaro, ma se si parla di servizi non si sta parlando sicuramente di C standard, e al 90% si parla di Win32 dato che su sistemi Unix-like i servizi si chiamano comunemente demoni (daemons)...chiaro mica tanto, se apre un thread sul C ...