PDA

Visualizza la versione completa : [C++] Come realizzare un servizio su server


IlViandante2960
31-07-2007, 12:40
Salve. Ho un'applicazione in VC++ 6.0. Questa dev'essere operante sul Server aziendale 24/24h. Anche se il server cade e poi riparte dovrebbe ripartire anche la mia applicazione.

Mi è stato detto che il Server non vede le "applicazioni" ma opera in termini di "servizi".
Qualcuno sa darmi le dritte per fare in modo che la mia applicazione *.exe venga vista o installata come servizio cosicchè sia sempre operante sul Server?

Grazie :ciauz:

XWolverineX
31-07-2007, 12:45
Per metterla come servizio aspetta Oregon o Andbin che loro sanno come si fa.

Una "valida" alternativa sarebbe di fare il tuo programma normalmente e poi metterlo in esecuzione automatica.
Certo, fare un servizio è piu' affascinante e difficile dal lato tecnico, ma potrebbe andare anche cosi :master:

andbin
31-07-2007, 12:59
Sì, so come si fanno i "servizi di sistema" ... ma non è che li faccio tutti i giorni ... ;)

In sostanza, un servizio di sistema ha delle proprietà particolari tra cui la possibilità di avere privilegi anche più alti rispetto agli utenti e il fatto che viene avviato prima che compaia la finestra di login degli utenti.
Tipicamente un servizio si occupa di effettuare operazioni in background, senza alcun interfacciamento diretto con l'utente (es. uno spooler di stampa, un server web, un servizio di rete, ecc...).

Per realizzare un eseguibile che possa girare come servizio di sistema bisogna usare delle API apposite, poiché ci deve essere un interfacciamento tra l'eseguibile e il SCM (Service Control Manager). In pratica vuol dire che una applicazione deve essere pensata e scritta appositamente per poter funzionare come servizio.

La documentazione ufficiale sui servizi si trova su MSDN:
http://msdn2.microsoft.com/en-us/library/ms685141.aspx

Purtroppo al momento non ho un sorgente di "base" per realizzare un servizio. Se riesco velocemente a scriverne uno, lo posto.

XWolverineX
31-07-2007, 14:35
Va be l'ho scritto perchè praticamente qui i boss siete voi 2

oregon
31-07-2007, 14:38
Non ho capito se hai i sorgenti dell'applicazione o solamente l'eseguibile ...

IlViandante2960
31-07-2007, 15:15
Innanzitutto ringrazio per le risposte. Forse il mio problema è più semplice.

Ho un'applicazione in vc++ 6.0 residente su un server che dev'essere sempre attiva.
Se il server cade e riparte dovrebbe poter ripartire anche la mia applicazione automaticamente. Come fare?

Io pensavo ci fosse fra le specifiche software di sistema del server una funzione tipo "Operazioni Predefinte" in cui mettere tutti link ad applicazioni o file da attivare automaticamente... Ma pare che non è così...

Ogni ulteriore contributo è ben accetto...
:D

oregon
31-07-2007, 16:55
Non mi hai risposto ... :confused:

IlViandante2960
31-07-2007, 17:23
Oregon è un *.exe. E' un eseguibile che dev'essere sempre attivo, sempre in esecuzione sul server aziendale...

Io non sono uni sistemista, ma possibile che l'unica strada sia quella d'incapsulare il mio eseguibile in un servizio? Una cosa più immediata non c'è?

oregon
31-07-2007, 21:25
Originariamente inviato da IlViandante2960
Oregon è un *.exe. E' un eseguibile che dev'essere sempre attivo, sempre in esecuzione sul server aziendale...

Forse non hai letto la domanda .... te la rifaccio sperando di avere una risposta ...

"Non ho capito se hai i sorgenti dell'applicazione o solamente l'eseguibile ..."



Io non sono uni sistemista, ma possibile che l'unica strada sia quella d'incapsulare il mio eseguibile in un servizio? Una cosa più immediata non c'è?

I servizi non li scrivono i sistemisti ma i programmatori ...

Un'altra soluzione e' includere la tua applicazione nella cartella "Esecuzione Automatica" e impostare l' autologin con il server in modo che, anche se riavviato, venga comunque fatto un login e la tua applicazione parta ...

billiejoex
31-07-2007, 22:45
Io non sono uni sistemista, ma possibile che l'unica strada sia quella d'incapsulare il mio eseguibile in un servizio? Una cosa più immediata non c'è?
Non devi incapsulare nulla. L'exe è sempre lo stesso.
Semplicemente, all'interno del codice, dovrai aggiungere dei richiami a delle funzioni di sistema che ti facciano partire tale eseguibile come "servizio" anzichè come un "comune" processo.
La differenza sostanziale tra i due è che il primo parte in startup indipendentemente che un'utenza si sia gia loggata o meno, il che soddisfa appieno la tua esigenza di:

> Anche se il server cade e poi riparte dovrebbe ripartire anche la mia applicazione.

Se del programma in questione hai i sorgenti la domanda è pertinente ed IT (si lavora sul codice), altrimenti no (devi usare tool di terze parti con cui "servizierizzare" (o seviziare, a seconda dei gusti :P) l'eseguibile.)

Saluti.

Loading