Newsgroup: it.comp.lang.visual-basic
Titolo: [?] servizi nt

scusate la banalita' delle domande, ma nt/2000 sto cominciando a conoscerlo
ora.
una volta realizzato un exe, come gliela si spiega a nt che e' un servizio ?
va registrato in qualche chiave speciale ? ci sono in nt o altrove utilita'
che semplificano il lavoro ?
grazie, a.

...

Ma non fosti tu ad inviarmi il  ntsvocx.dll ????
Comunque, non sono un esperto di servizzi, ti posso pero' dire che un
servizio non è un exe standard.
Addirittura ho letto un articolo su 
microsoft.com
 che _affermava_ che con VB
era _impossibile_ fare realizzare un servizio.
In pratica un servizio deve implementare un qualcosa (?Funzioni Esporate?)
per poter interagire col sistema secondo specifiche.
In pratica invece esistono OCX che aggirano questi limiti del VB e
permettono facilmente di fare un servizio anche con VB.  ( vedi  l'ocx
ntsvocx.dll che ho provato, funziona anche sotto 2000 )
Esistono anche programmi che permettono di eseguire un qualunque programma
come servizio, ma in questo modo, si perdono alcune capacità dei servizzi,
quale la possibilità di 'Stoppare" il servizio.
Sappi inoltre che ai servizzi è normalmente vietato interagire col Desktop,
ossia, è vietato rendere visibili le finetre create.
E' vero ne so poco anchio, ma almeno adesso ne sai poco anche tu ^____^
Sempre il Mes
Ettore Maronese
http://www.maronese.com/mes
Sito Comune
http://www.murialdo.it/it_lang_vb

 E' vero ne so poco anchio, ma almeno adesso ne sai poco anche tu ^____^
pochissimo :):)
grazie comunque e ciao, a.
se poi penso che il tutto serve essenzialmente a fare dei bkp automatici per
alcuni colleghi, possibilmente senza fare login sul server...

 nt "what is a service please ? how do i set it on ?" -- non oso pensare...
INFO: Running Visual Basic Applications as Windows NT Services
http://support.microsoft.com/support/kb/articles/Q175/9/48.ASP
Riassunto: la M$ sconsiglia caldamente di farlo... comunque poi ci mettono
una pezza:
NT Service: An OLE Control for Creating Windows NT Services in Visual Basic
http://msdn.microsoft.com/library/techart/msdn_ntsrvocx.htm
HOWTO: Use NTSVC.OCX from Visual Basic
http://support.microsoft.com/support/kb/articles/Q170/8/83.ASP
Bye, G.
--
---------------------------------------------
    Le risposte alle tue domande le trovi
    sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
       ... e nell'help in linea !
---------------------------------------------
Real E-address: 
gaet...@hotmail.com

 particolare exe come servizio. l'eta' e' quella che e'...
Le questioni più complesse (relativamente) da gestire per la realizzazione
di un servizio NT nascono dalla necessità, per un servizio, di dialogare
con il "supervisore" dei servizi, ossia Service Control Manager.
Il servizio deve gestire risposte e azioni standard a richieste, sempre
standard, che provengono dal SCM.
Una altra questione riguarda il "timing" di queste risposte/azioni, che
è predefinito e non può essere alterato.
Comunque queste operazioni possono essere gestite comodamente
da un programma VB, con qualche attenzione.
Altra questione: la registrazione del servizio.
A questo scopo si possono usare delle utility apposite; non ho mai
usato l'Ocx citato, ma so che srvany.exe, in collaborazione con
instsrv.exe, svolgono il compito agevolmente.
Ho il framework di un servizio NT; se vuoi te lo mando.
(anche se mi sembra di avertelo inviato qualche tempo fa.
Ma forse non eri tu).

 Ma forse non eri tu).
ho scorso i vari tuoi messaggi a me e ad altri che mi sono archiviato e non
mi sembra, ma potrei tranquillamente sbagliarmi. se puoi, grazie.
nel mio minimo, se credi, posso mandarti il controllo di cui si parlava (che
include un esempio vb e uno delphi, oltre, come diceva ettore, i sorgenti
vc), oltre a un po' d'altra roba, fra cui i testi ms citati da paperino,
direi, e l'ocx ms, che pero' ( 
http://smsoft.chat.ru
  , in cui pure ho
trovato qualcosa):
Of course, you can use free NTSVC.OCX control from Microsoft to create your
service, and this way is simple and reliable, but it has one disadvantage:
you can't set "Unattended execution" option for it. You can't use any OCX
controls when "Unattended execution" is set (you can use NTSVOCX.DLL from
BackupReport).
se e' attendend mi basta un exe. quindi posso metterci una croce sopra e si
torna alla dll di prima (
http://download.backupreport.com/cpp/ntsvocx/ntsvocx.exe
 )
dimmi tu se pensi ti serva il materiale.
grazie e ciao, a.
--
andrea....@tin.it

 
http://download.backupreport.com/cpp/ntsvocx/ntsvocx.exe
 )
Questo l'ho già scaricato.

Per creare un nuovo servizio si lancia instsrv.exe e il servizio sara'
srvany.exe dandogli il nome per esempio MyService ora all'interno della
registry ci sara'
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MyService]
basta aggiungere
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MyService\Parameters]
"Application"="c:\\Programmi\\MiaDir\\MioPrg.exe"
poi se uno vuole cambiare le proprieta'
come, partenza manuale o automatica, se interagire con il Desktop o meno
lo si fa da Servizi nel pannello di controllo di NT
Instsrv.exe e srvany.exe fanno parte del resource kit di nt
"Paperino" <non...@lo.dico> ha scritto nel messaggio
news:8pr64v$dii$1...@stargate1.inet.it...


 Instsrv.exe e srvany.exe fanno parte del resource kit di nt
grazie, risposta precisa ed esauriente.
provo a cercare i due exe nel cd di win2000. eventualmente recupero quelli
di nt, mi auguro vadano ancora.
ciao, a.




 compilato lo avrei fatto girare su NT :))
io sto provando a farlo in nt5ita, ma dovra' girare in nt4usa. speriamo.
per giunta, in attesa del rk, con fastftp ho trovato solo un instsrv del 96.
con /? da':
Installs and removes system services from NT
INSTSRV <service name> (<exe location> | REMOVE)
  [-a <Account Name>] [-p <Account Password>]
  Install service example:
    INSTSRV MyService C:\MyDir\DiskService.Exe
    -OR-
    INSTSRV MyService C:\mailsrv\mailsrv.exe -a MYDOMAIN\joebob -p foo
  Remove service example:
    INSTSRV MyService REMOVE
riguardo anche la risposta di qsc1, provo e vede che aria tira...

 Questo l'ho già scaricato.
ho provato con questa dll.
il codice che ho messo insieme e' molto semplice. c'e' un exec.txt che
contiene solo 2 righe:
c:\vbprog\altri\ntservice\;test1.mdb
c:\vbprog\altri\ntservice\;test2.mdb
(sono due copie di un file da 27 mb, quindi ogni operazione di copia a cache
pulita qualche secondo dovrebbe durare)
e un piccolo form tipo splash (se ne potrebbe fare a meno, ma mi serve nel
frattempo per avere un'idea). cfr sotto.
il punto e': se lo lancio manualmente, funziona dando un percorso per i bkp
sia in locale sia in rete (sono amministratore sia della macchina locale sia
di quella target).
se lo registro come servizio con instsrv
    instsrv bkp C:\vbprog\altri\ntservice\test2\test2.exe
--> success, e lo registra come local system. nei servizi appare
regolarmente.
pero' non succede *nulla*. ne' errori ne' altro.
mi era venuto il dubbio che si attivasse prima delle connessioni di rete, ma
in locale e' lo stesso.
dove sbaglio ?
grazie, a.
---
Option Explicit
Private Sub cmdOK_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    On Error GoTo errman
    Me.Show
    Dim j As Integer
    For j = 1 To 50000
        Text1 = j: DoEvents
    Next
    Dim fName As String, nLine As String
    Dim fNum As Integer, lConf As Long, lRet As Long
    Dim fSrc As String, fTrg  As String
    Dim str() As String
    fNum = FreeFile
    fName = App.Path & "\exec.txt"
    Open fName For Input As #fNum
    Text1 = ""
    Do Until EOF(fNum)
        Line Input #fNum, nLine
        str() = Split(nLine, ";")
        fSrc = str(0) & str(1)
        fTrg = "c:\bkp\" & str(1)
        Text1 = Text1 & vbCrLf & fSrc
        FileCopy fSrc, fTrg
        Text1 = Text1 & vbCrLf & fTrg
        Text1 = Text1 & vbCrLf & "--------------> OK"
        Text1 = Text1 & vbCrLf
        Text1.SelStart = Len(Text1)
        DoEvents
    Loop
    Clipboard.Clear
    Clipboard.SetText Text1
    For j = 1 To 10000
        Caption = j: DoEvents
    Next
    NTSC.RequestScmStopNotification
'    Unload Me
    Exit Sub
errman:
    Text1 = Text1 & vbCrLf & "##################"
    Text1 = Text1 & vbCrLf & Err & " -- " & Error
    Text1 = Text1 & vbCrLf & "##################"
    Text1 = Text1 & vbCrLf
    Resume Next
End Sub
Private Sub NTSC_ReceivedScmStopNotification _
        (ByVal errorCode As Long, ByVal errorDetail As String)
    NTSC.AnnounceStoppingNow
    Unload Me
End Sub

 pero' non succede *nulla*. ne' errori ne' altro.
trovato qc in gestione computer, visualizzatore eventi:
Il servizio bkp non è stato avviato per il seguente errore:
Il servizio non ha risposto alla richiesta di avvio o controllo nel tempo
previsto.
in effetti il readme della dll accennava qualcosa del genere. come posso
essere sicuro che il prg non vada in timeout ? evidentemente il ciclo non
basta, o non va li'.
tia, pal

 pero' non succede *nulla*. ne' errori ne' altro.
La procedura è sbagliata:
    instsrv.exe [NomeServizio] C:\winnt\system32\srvany.exe.
dove [NomeServizio] è _l'alias_ assegnato al servizio.
In seguito, devi modificare il registry. Vai alla chiave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[NomeServizio]
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).
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".
PS
A proposito dei file che mi avevi mandato, ho scorso il codice
del progetto allegato e mi pare che sia un framework decente.
Non ti invio quindi quello che ho io visto che sono equivalenti.
Ti invio invece i due eseguibili in questione + le note (mie e del
resource kit) per l'installazione del servizio.

 compilato lo avrei fatto girare su NT :))
In effetti non si registra.
Vedo che c'è il sorgente C++ allegato.
Proverò a ricompilare.

     instsrv.exe [NomeServizio] C:\winnt\system32\srvany.exe.
e <g>razie a ms del brillante /? di instsrv...
ho seguito passo passo. in effetti e' un po' macchinoso. dopo la prima
apparizione, per essere sicuro che non venisse eseguito dopo il login ho
modificato il codice.
a parte che il form se ne sta bellamente a centro schermo finche' non do'
ok -- il che vuol dire che non ho ancora capito bene la dll -- i due txt in
\bkp avevano orario 23:11, mentre il login l'ho fatto ( apposta :) 20 minuti
dopo.
ciao, a.
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub cmdOK_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    On Error GoTo errman
    Me.Show
    Me.Refresh
    DoEvents
    Sleep 5000
    NTSC.RequestScmStopNotification
    Dim fName As String, nLine As String, fNum As Integer
    Dim fSrc As String, fTrg  As String, str() As String
fNum = FreeFile
fName = "C:\vbprog\altri\ntservice\txt1.txt"
Open fName For Output As #fNum
Print #fNum, Now
Close #fNum
fNum = FreeFile
fName = "C:\vbprog\altri\ntservice\txt2.txt"
Open fName For Output As #fNum
Print #fNum, Now
Close #fNum
    fNum = FreeFile
    fName = App.Path & "\exec.txt"
    Open fName For Input As #fNum
    Text1 = ""
    Do Until EOF(fNum)
        Line Input #fNum, nLine
        str() = Split(nLine, ";")
        fSrc = str(0) & str(1)
        fTrg = "c:\bkp\" & str(1)
        Text1 = Text1 & vbCrLf & fSrc
        FileCopy fSrc, fTrg
        Text1 = Text1 & vbCrLf & fTrg
        Text1 = Text1 & vbCrLf & "--------------> OK"
        Text1 = Text1 & vbCrLf
        Text1.SelStart = Len(Text1)
        DoEvents
        Sleep 1000
    Loop
    Clipboard.Clear
    Clipboard.SetText Text1
'    NTSC.RequestScmStopNotification
'    Unload Me
    cmdOK.Enabled = True


 dopo.
Ma perché hai usato un form ?
O meglio, perché ai messo il codice nell'evento Form_Load ?
Un modulo non č meglio ?

 Un modulo non č meglio ?
molto. solo che, a parte che non mi era proprio venuto in mente, pensavo a
un bello splash. certo che senza login chi lo ammira ? :)
cmq, non capisco perche' non si scarica.

 cmq, non capisco perche' non si scarica.
Perché è un form. Una volta avviato, resta in attesa di input.
No input, no action.

 No input, no action.
nell'help della dll c'era quella frase, subito sotto la riga di notifica
fine operazioni mettete l'istruzione per chiudere, in delphi app.terminate.
end mi sembrava brutale, cosi' ho messo unload me (ultima sub). ma forse
l'ho messo nel punto sbagliato...

 l'ho messo nel punto sbagliato...
Non so se il codice che hai postato sia effettivamente quello
che gira; se è così, l'unload non si verifica mai, dato che nel
punto cruciale le istruzioni sono "commented-out".

 punto cruciale le istruzioni sono "commented-out".
per un attimo mi son detto: vai pal, un'altra delle tue. no, nel codice e'
scommentato, in teoria dovrebbe arrivarci. in pratica devo dare ok. ma non
e' importante, seguiro' il consiglio del modulo.

tenerti on-line più a lungo; e se non è dolo è dabbenaggine.
tanto io c'ho la flat :P

e' importante, seguiro' il consiglio del modulo.
e un bell'App.StartLogging()? (credo)

 ha scritto


secondo me jimi parlava di un particolare provider italiano... io, almeno,
senz'altro.

> tanto io c'ho la flat :P
Si, anch'io. Non lo dicevo tanto per me, quanto per la qualità
penosa del servizio. Avranno anche tanti utenti (poi, tanti quanti ?)
ma se ci sono strozzature evidenti, aggiungi un server (2, 10 ,100).
Non è certo una questione costi; mi sembrano "favori incrociati".
"Faccende" da anti-trust, insomma.
PS
Grazie per la dritta sul server teutonico; non ho avuto un
solo timeout fino ad ora :)

senz'altro.
in ogni caso posso permettermi anche 9 ore al giorno (non consecutive
:( , quindi la lentezza non è un problema

solo timeout fino ad ora :)
io li ho, ma a causa della linea, che è penosa :(
Aruba? mai più!!!


