Newsgroup: it.comp.lang.visual-basic
Titolo: Servizio windows con visual basic

Mettiamo di avere 2 PC A e B
Io vorrei che A abbia un servizio in ascolto su una porta e quando da 
B lancio un comando, A attraverso il servizio mi apre un programma.
Tutto questo sarebbe possibile ?
Con un Servizio Win ?
Ma si possono creare Servizi Win con VB6 ?
Grazie, Alverman

 Ma si possono creare Servizi Win con VB6 ?
Non direttamente. Però ci sono metodi per lanciare come servizi
dei normali programmi (Google keyword: "srvany") e ci dovrebbe
essere anche qualche "SporcoTrucco®" per creare servizi con
VB. Per la precisione era un OCX, fammelo ritrovare...  eccolo:
ntsvc.ocx. Mai provato, personalmente, ma dovrebbe funzionare.
Comunque, se non hai assoluto bisogno che sia un servizio, se
puoi evita.
Bye, G. 

 puoi evita.
Grazie per l'eaudiente risposta.
Ne sarei felice se potessi fare a meno di creare un servizio !!
Secondo te potrei fare quello che devo fare senza usare un servizio?
Come potrei fare ?
Grazie, Alverman

"alverman" ha scritto nel messaggio

Con un programma normale :-).
Per il tuo scopo, l'unica differenza con un servizio è che per avviarlo
deve esserci un utente loggato. Quindi, a meno che non ti serva avere
il programma in funzione prima del login, non hai bisogno di un servizio.
Se la domanda che non hai ancora posto, ma stai per porre è: "ma
come faccio a mettere un programma in ascolto su una porta ecc. ecc.",
ti posso suggerire il componente Winsock.
E già che ci sei il Sito Comune di questo NG: 
http://www.it-lang-vb.net/
Bye, G. 

 E già che ci sei il Sito Comune di questo NG: 
http://www.it-lang-vb.net/
:)
Già lo uso Winsock, ma penso che mi serva proprio un servizio.
Di fatto lanciando un programma sul mio pc interrogo la rete per verificare 
se esiste uno o più pc in ascolto su quella porta.
Se così fosse lancio un'applicazione sul pc che ha risposto, o scelgo cosa 
fare, e procedo nella scansione per verificare se altri pc sono in ascolto 
sulla stessa porta.
Perciò, dal momento che deve essere una cosa trasparente all'operatore devo 
proprio creare un servizio :(
Proverò.
Grazie, Alverman


==========================================================


ha scritto:

Ti consiglio di leggere questi link:
http://www.smsoft.ru/en/ntservice.htm
http://www.vbrad.com/article.aspx?id=92
 
http://support.microsoft.com/default.aspx?scid=kb;en-us;137890
poi ti devi scaricare questi:
http://www.geocities.com/SiliconValley/Pines/3991/srvany.zip
http://www.geocities.com/SiliconValley/Pines/3991/ntsvc.zip
--
ciao
  Stefano

 Io l'ho usata diversi anni fa, e funziona egregiamente.
Su vista non si registra quell'ocx :(

Nel suo scritto precedente, alverman ha sostenuto :

Ciao Alverman,
mi dispiace me non conosco vista e mi rifiuto di installarlo :-), 
almeno fino alla Sp2.
Con XP e su sistemi server (2000 e 2003) funziona benissimo.


Scusa, ma mi servirebbe un'informazione :)
Se nel servizio voglio inserire un controllo che rimane in ascolto su una 
porta come posso fare ?
In vb uso Winsock ma nei servizi come si fa che non si ha una form dove 
inserire oggetti ?
Grazie, Alverman

Scusa, ma mi servirebbe un'informazione :)

mmm, potresti usare un wrapper per emulare Winsock, qualcosa così:
http://www.handango.it/Dettaglio_Prodotto/72050/Winsock_API_Wrapper.php
o anche una classe che fa la stessa cosa:
http://www.a1vbcode.com/app-2880.asp
--
ciao
  Stefano

 Su vista non si registra quell'ocx :(
vista home premium
[Window Title]
RegSvr32
[Content]
DllRegisterServer in ntsvc.ocx riuscito.
[OK]
ciao, a.

 inserire oggetti ?
anche questa non l'ho capita. l'unica volta che ho provato un servizio, un 
form ce l'aveva e lo mostrava pure. mi sembra sia _sconsigliato_ interagire 
col servizio, ma e' un'altra cosa.
se il tuo programma ha bisogno di controlli e non puoi mostrare il form, 
tieni il form nascosto.
ciao, a.

 [OK]
Hai ragione si registra.
Ma in vista non va !

"alverman"

non mi stupisce. oltre a registrare l'ocx, se ricordo bisognava usare srvany 
passandogli il nome del tuo exe come parametro, o qualche altro accrocchio 
simile.
vista quanto a servizi sembra decisamente piu' raffinato.
d'altronde se cerchi
ntsvc srvany
nel primo link techrepublic dice
The NtSvc.ocx is a basic solution useful for experimentation or for a simple 
service, while SrvAny.exe should really be avoided and used only as a last 
result.
ecco, ho ripescato un vecchio post con le linee guida per un servizio vb, le 
metto sotto. ma p.f. nota che si parla di quasi 7 anni fa e di nt/2000...
ciao, a.
se hai un tuo exe pippo e vuoi farne un servizio,
1. scarica la dll free e le istruzioni:
http://download.backupreport.com/cpp/ntsvocx/ntsvocx.exe
registrala e inserisci in pippo quanto dovuto.
2. poi dovresti piazzare in
\winnt\system32
un paio di exe:
instsrv.exe e srvany.exe
contenuti nel resource kit di winnt.
3. crea quindi un servizio "pippo" con la seguente linea di comando:
instsrv.exe pippo c:\winnt\system32\srvany.exe
4. devi dunque modificare il registry. vai alla chiave:
hkey_local_machine\system\currentcontrolset\services\pippo
aggiungi una nuova chiave "parameters".
aggiungi una stringa a "parameters" che nomini "application" e
assegni come valore il percorso completo della directory di
installazione del servizio, (dovrebbe comunque essere \winnt\system32).
4.1. per fare un modo che il servizio sia invisibile (non rintracciabile
nella lista dei task), aggiungi alla chiave "parameters" la
stringa "appparameters" e assegni come valore "/hidden". 

> "alverman"
questi non a caso hanno messo il logo
works with vista...
direi sia una specie di srvany
http://www.firedaemon.com/downloads-firedaemon-pro.php
ciao, a.

 registrala e inserisci in pippo quanto dovuto.
La dll dove la trovo ?
Il link non funzia.
Alverman

andrea palazzi ha spiegato il 22/10/2007 :

Esatto.
Un form può benissimo esserci.
Solo che non necessariamente è interattivo. C'è proprio un parametro 
del servizio che specifica se questo sia Interactive o meno, e se lo è 
può interagire solo con un utente Administrator, e solo in UNA 
sessione.
Ad esempio, se è interactive e c'è un utente in consolle, non è 
interattivo con sessioni rdp.
Per essere interactive, inoltre, deve essere registrato con credenziali 
LocalSystem, il che preclude ogni lavoro in rete (LocalSystem non ha 
alcuna credenziale di rete, può usare solo risorse definite come NULL).
Adesso accendo la virtualmachine di Vista e provo a registrare un 
servizio con NTSVC.ocx (mi sembrava di averlo già provato, ma mi viene 
un dubbio).
Alberto
-- 
Il tuo stesso identico umore,
ma la divisa di un altro colore

"alverman"

come dicevo, era un post del dicembre 2000...
hai provato a cercare anche solo semplicemente "ntsvc.ocx" ?
fra l'altro, da' questo link
http://www.freevbcode.com/ShowCode.asp?ID=4317
NT Service in VB6 Without NTSvc.ocx
che forse in vista e' piu' praticabile.
ma guarda anche gli altri link, cerca "nt service vb" e simili...
non vorrei deprimerti, ma se davvero hai intenzione di fare qualcosa che 
interagisca con windows a quel livello, forse e' meglio che ravani e provi 
un po'...
considera che 7 anni fa il web era molto piu' rudimentale, ora trovi molti 
piu' spunti...
nel frattempo ho cambiato varie macchine, su questa trovo solo l'ocx, seno' 
te la manderei.
ciao, a. 

 alcuna credenziale di rete, può usare solo risorse definite come NULL).
ecco, per quello che ha in mente alverman, piu' che il servizio mica 
servizio il punto mi sembrava fossero proprio le credenziali.
ciao, a.

Scriveva andrea palazzi martedì, 23/10/2007:

Mah, dovrei provare, ma credo che l'uso di winsock sia proprio un caso 
NULL (da un punto di vista NT, intendo), e che quindi possa funzionare 
senza problemi.
Anzi, adesso che mi viene in mente, ho proprio dei servizi che girano 
come LocalSystem e che usano Winsock, quindi direi che ci siamo.
Ciao
Alberto
-- 
Karl Marx: Uno scrittore è produttivo non nella misura in cui produce 
idee, ma nella misura in cui arricchisce l'editore che pubblica le sue 
opere.

Ho vista Ultimate
Ragazzi ......... FUNZIONA alla grande !!
Ho creato un servizio con l'ocx, nella form ho inserito un controllo winsock e 
l'ho messo in ascolto su una porta.
Dal portatile mi sono connesso ed ho inviato una stringa che sul server ho 
visualizzato da visualizza eventi con app.logevent
Grazie a tutti per le info utilissime :)
Ora il problema successivo sarà, in fase di installazione del pacchetto, 
riuscire a fare quel che serve automaticamente sotto Vista.
Cioè, creare il servizio e modificare il registro.
Intanto per mettere le mani in avanti :) ci sono strategie particolari per 
fare queste operazioni in fase di installazione su Vista ?
Penso che se un prog. si installa su Vista tutto gli altri (win 2000 e Xp) non 
abbiano problemi ...... No ?
Rilancio i ringraziamenti !!
Alverman

Ora se dal servizio, in una certa situazione, voglio lanciare un'applicazione 
cosa devo fare ?
Ho provato con:
X = ShellExecute(hWnd, "Open", DataSplit(1), vbNullString, vbNullString, 
SW_NORMAL)
dove DataSplit(1) è il percorso completo di un'immagine.
In un'altro programma con questo comando viene lanciato il programma associato 
ai jpg e apre l'immagine.
Cosa sbaglio ?
Grazie, Alverman

alverman scriveva il 23/10/2007 :

Innanzitutto, 'apre l'immagine' significa che la mostra all'utente, e 
questo cozza col fatto che il servizio esegua come LocalSystem mentre 
l'utente in sessione è un utente NT 'umano'.
Poi va verificato quanto dicevo in altro post a proposito 
dell'Interactive.
Poi va detto che tu utilizzi un 'open' che è memorizzato da NT su base 
utente. Non credo esista la tabella delle operazioni predefinite per 
l'utente LocalSystem.
In primis, tenta di avviare un eseguibile che non dipenda dall'utente, 
ad esempio calc.exe (meglio se con tutto il percorso). Se va, allora 
l'unico problema è di richiamare il visualizzatore di immagini come 
applicazione e non come operazione di Windows.
Se non va, allora il problema è l'interactive. Accertati che l'utente 
sia administrator, che non ci siano altre sessioni, che il servizio 
abbia Interactive=True, e che il servizio esegua come LocalSystem.
Ricordiamoci, comunque, che non si fanno le cose senza sapere cosa 
siano. Un servizio è per definizione un qualcosa che NON interagisce 
con l'utente (del resto, si avvia PRIMA del login, quindi non può 
sapere chi sarà l'utente). Quindi, prima di fare un servizio, 
occorrerebbe studiare cosa sia un servizio.
Ciao
Alberto
-- 
Karl Marx: Le circostanze fanno l'uomo non meno di quanto l'uomo faccia 
le circostanze.

 occorrerebbe studiare cosa sia un servizio.
Hai perfettamente ragione.
Se mi fossi sommermato un po' di più su cosa fanno i servizi avrei capito un 
po' prima le cose.
Comunque mi è servito tantissimo l'aiuto del NG
Alverman

 occorrerebbe studiare cosa sia un servizio.
Hai perfettamente ragione !!
Se mi fossi soffermato un po' di più di cosa fanno i servizi avrei fatto meno 
domande insensate.
Comunque sia questo thread mi è stato utilissimo grazie a voi.
Alverman

 occorrerebbe studiare cosa sia un servizio.
Hai perfettamente ragione !!


 occorrerebbe studiare cosa sia un servizio.
Hai perfettamente ragione !!


Scusate ma da mynewsgate non riuscivo ad inserire il messaggio dove 
volevo
riprendo l'ultimo 


 Grazie, Alverman
potrei sapere come hai risolto il problema?
ho la tua stessa necessità su windows 2003 server...
grazie
Tiziana