Mostra il codice corretto.
Con services.msc riesci ad avviarlo?
Mostra il codice corretto.
Con services.msc riesci ad avviarlo?
no, non riesco ad avviarlo neppure con services.msc !codice:BOOL AddAutoStartService(BOOL MsgBox){ DWORD error; SC_HANDLE key; SC_HANDLE result; key = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CREATE_SERVICE); error = GetLastError(); result = CreateService(key, PROCESSNAME, PROCESSNAME, SC_MANAGER_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, EXEPATH, NULL, NULL, NULL, NULL, NULL); error = GetLastError(); return TRUE; }
il punto è che ho la certezza che il software per un breve lasso di tempo si avvii, perché partono un paio di socket verso il mio server su altervista, che quindi logga sul database mysql! Sarà che forse devo "rispondere" al servizio? un po' come le finestre create con createwindowex
Probabile che il problema stia nel codice del servizio, prova a postarlo.
Amaro C++, il gusto pieno dell'undefined behavior.
mumble... ma non è quello che ho appena postato sopra?![]()
Quello è un pezzetto di codice di un eseguibile che registra un servizio... se il servizio vero e proprio stia in quello stesso eseguibile non lo so, ma in ogni caso ne devi mostrare il codice, in particolare come viene richiamata la StartServiceCtrlDispatcher e come è strutturato il cosiddetto ServiceMain...
Amaro C++, il gusto pieno dell'undefined behavior.
ma una WINAPI WinMain non gli basta?
Quanto sono esigenti questo servizi! =/
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.
chiaro mica tanto, se apre un thread sul C ...Originariamente inviato da MItaly
È C con le librerie di Windows (roba del Platform SDK), come è chiaro dai tipi e dalle funzioni utilizzate (e dal fatto che vuole creare un servizio, oggetto che il C standard ovviamente non menziona).
Comunque... dopo aver sistemato i parametri (come specificato correttamente da XAlbeX), inserisci dopo ciascuna chiamata una GetLastError per verificare esattamente quale codice di errore ottieni.
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 ...
Amaro C++, il gusto pieno dell'undefined behavior.
dai non fa nulla... piuttosto... io ho un librone sul C, di quelli grandi grandi, che però non spiegano nulla sulla programmazione per win32! Quindi sto improvvisando un pochettino, so di star sbagliando, ma al momento non trovo nessun buon manuale a riguardo!
È normale... ma per ora inizia ad imparare quello, Win32 viene dopo.Originariamente inviato da Salvy95
dai non fa nulla... piuttosto... io ho un librone sul C, di quelli grandi grandi, che però non spiegano nulla sulla programmazione per win32!
Un grande classico è il Petzold, ma non so se copra anche i servizi... comunque ti fa entrare nella mentalità Win32, poi per i dettagli c'è MSDN.Quindi sto improvvisando un pochettino, so di star sbagliando, ma al momento non trovo nessun buon manuale a riguardo!
Amaro C++, il gusto pieno dell'undefined behavior.