PDA

View Full Version : [VB6] Scrivere servizi per windows XP


82ginopino
21-02-2008, 11:01
Ciao a tutti, avrei bisogno di una dritta....
ho creato un progetto come eseguibile standard in VB6, dopo averlo compilato e testato, l'ho inserito nella lista dei servizi di windows e fin qui tutto bene.
Subito dopo l'avvio del programma (come servizio) windows lo termina automaticamente con questo messaggio:

< IL SERVIZIO SU COMPUTER LOCALE SI E' AVVIATO, QUINDI SI E' INTERROTTO. ALCUNI SERVIZI SI INTERROMPONO AUTOMATICAMENTE SE NON VI SONO OPERAZIONI DA ESEGUIRE, AD ESEMPIO I SERVIZO AVVISI E REGISTRO DI PRESTAZIONI>

Ovviamente non è così anke perchè nel programmino c'è un timer e ogni secondo vengono eseguiti dei controlli....sto diventando matto!:muro:
Il programma mi serve tra i servizi, perchè vorrei ke fosse attivo da subito, ovvero ancora prima ke venga eseguita la scelta utente......AIUTO!

71104
21-02-2008, 13:50
http://msdn2.microsoft.com/en-us/library/ms685141(VS.85).aspx
in Visual Basic 6 non si possono scrivere servizi - non che mi risulti, e se anche si potesse perché farsi del male?

82ginopino
21-02-2008, 14:20
grazie x la risposta, anche io cerco di semplificarmi la vita....cmq ho bisogno ke il programma venga avviato prima ancora ke si acceda a windows scegliendo un'utente....ke io sappia gli unici programmi ke sono in esecuzione in quel momento sono i servizi.....
Conosci un'alternativa...??

71104
21-02-2008, 15:21
uhm, no... non sono i servizi l'unico software in esecuzione in quel momento: ci sono anche i drivers e c'è anche GINA, ma nulla di realizzabile tramite Visual Basic 6.

82ginopino
21-02-2008, 15:51
Allora.....scrivere un driver lo escluderei, per prima cosa nn ne sarei capace e seconda cosa non me ne faccio un bel niente....
Detto questo, gina è carina??:D ....nooo skerzi apparte, nn so cosa sia mi spieghi x favore?GRAZIE!
Ps quando dici ke VB6 nn consente di scrivere servizi o driver, è perchè conosci un linguaggio specifico in grado di farlo?? Ke io sappia, con le giuste librerie, in VB6 come in pascal (x esempio) si può scrivere anche un sistema operativo....insomma qualsiasi cosa! Nn ti risulta?

^TiGeRShArK^
21-02-2008, 16:14
a me dava lo stesso problema quando facevo partire il servizio come localservice ma non avevo i diritti necessari per effettuare delle operazioni.
..tutto questo ovviamente se il tuo servizio nella OnStart fa qualcosa di "utile"... perchè se non fa niente lì mi sa che è giusto che termini :fagiano:
ah...
il mio non è scritto in VB 6 :asd:

82ginopino
21-02-2008, 16:22
i privilegi x me non sono un problema, ke linguaggio hai usato te? E poi a me nn costa niente fargli aprire un file, e kiuderlo a fine sessione il problema è sarà sufficente? Ogni secondo il programma controlla una variabile e esegue un if....questo nn basta??

^TiGeRShArK^
22-02-2008, 09:38
i privilegi x me non sono un problema, ke linguaggio hai usato te? E poi a me nn costa niente fargli aprire un file, e kiuderlo a fine sessione il problema è sarà sufficente? Ogni secondo il programma controlla una variabile e esegue un if....questo nn basta??
Io ho usato il C#...
Eventualmente se ti decidessi a cambiare linguaggio potresti passare al VB.NET che è meglio del VB6.
Che fa il tuo programma?
..e soprattutto come l'hai fatto partire?
io ho scritto questo codice di inizializzazione per farlo partire come servizio...

namespace FileGuardian
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new GuardianService()
};
ServiceBase.Run(ServicesToRun);
}
}
}


public partial class GuardianService : ServiceBase
{
DirectoryListener dirListener;


public GuardianService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
Logger.log("Starting service...");
dirListener = new DirectoryListener();
Logger.log("Service correctly created");
}

e funziona perfettamente....

82ginopino
22-02-2008, 10:34
mmmm vado a naso....
da quello ke ho letto tu hai scritto un servizio a tutti gli effetti con tanto di inizializzazione, io ho scritto un normalissimo programma, l'ho compilato e ho cercato di far partire l'eseguibile come servizio....che in effetti (lo ammetto) è un approccio un po maccheronico al problema.....
Cmq grazie, prendo spunto....vedo se anke in VB6 c'è bisogno di un'inizializzazione del servizio tipo la tua, male ke vada passo a VB.NET....
ti faccio sapere....

tomminno
22-02-2008, 10:44
mmmm vado a naso....
da quello ke ho letto tu hai scritto un servizio a tutti gli effetti con tanto di inizializzazione, io ho scritto un normalissimo programma, l'ho compilato e ho cercato di far partire l'eseguibile come servizio....che in effetti (lo ammetto) è un approccio un po maccheronico al problema.....
Cmq grazie, prendo spunto....vedo se anke in VB6 c'è bisogno di un'inizializzazione del servizio tipo la tua, male ke vada passo a VB.NET....
ti faccio sapere....

Alle brutte puoi sempre usare questo
XYNTService (http://69.10.233.10/KB/system/xyntservice.aspx?display=PrintAll&fid=1239&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151)
Che ti consente di eseguire come servizio un qualunque programma esterno.

Da prendere con la massima cautela.

82ginopino
22-02-2008, 10:51
Ok grazie mille, farò un po di prove...
Anke se il servizio riesco ad avviarlo, il problema è che viene terminato automaticamente...

^TiGeRShArK^
22-02-2008, 10:58
Alle brutte puoi sempre usare questo
XYNTService (http://69.10.233.10/KB/system/xyntservice.aspx?display=PrintAll&fid=1239&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151)
Che ti consente di eseguire come servizio un qualunque programma esterno.

Da prendere con la massima cautela.
706 righe di codice C++ in una sola classe... :muro:

tomminno
22-02-2008, 13:52
706 righe di codice C++ in una sola classe... :muro:

Quel codice si può decisamente migliorare, però è già pronto per quello che deve fare. Se uno vuole migliorarlo o scriversi da 0 un servizio è liberissimo di farlo.

Poi manca la gestione delle varie opzioni che i servizi hanno e che sono gestibili da interfaccia grafica, con un pò di MSDN si può aggiungere pure quelle.

82ginopino
22-02-2008, 19:31
Grazie tommino, darò uno sguardo...intanto x risolvere penso ke passerò a VB.NET, tanto prima o poi devo decidermi ad utilizzarlo, con VB6 nn vado da nessuna parte...
Vi farò sapere ok?!