Creare un Servizio da un’applicazione utente
I servizi di sistema sono applicativi che girano in background col sistema operativo, hanno dei diritti speciali e quindi non possono essere terminate tanto facilmente proprio perchè non sono programmi utente. In merito ad una esigenza puramente personale volevo vedere se esisteva un modo per far girare un programma utente come servizio, poi lungo l’articolo capirete il perchè di questo mio interessamento:
Allora, prima di tutto ci occorrono due programmi atti uno ad installare e l’altro a girare un appliativo utente in modalità servizio: sono rispettivamente Instsrv.exe e l’altro Srvany.exe che potete scaricare entrambi da qui oppure qui, vi avviso che non supporta i file batch ma solo programmi exe, tali file sono compresi nel Kit per Sviluppatori di Windows.
Estraiamo il contenuto e lo mettiamo in una cartella del disco (suggerisco un path corto tipo C:\servizio) a questo punto apriamo un prompt dei comandi nella cartella interessata e digitiamo questo comando:
C:\servizio\instrsrv.exe "MioServizio" C:\servizio\srvany.exe
Verrà creato un servizio che si chiamerà MioServizio, ora arriva la parte più bella prendiamo un’applicazione che gira in modalità utente…
Vi ricordate quel mini-server SFTP di cui vi avevo parlato in questo articolo per condividere una cartella tramite protocollo SSH??? Bene, fa proprio al caso nostro (anzi mio!
Per praticità copierò tale applicativo nella medesima cartella). Sappiate per amor di cronaca che tale programma salva i dati impostati in una chiave di registro… poi capirete perchè l’ho rimembrato.
Quindi apriamo un editor di testo per scrivere un file di registro, basatevi sul campione qui sotto riportato:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MioServizio\Parameters]
"Application"="C:\\servizio\\msftpsrvr.exe"
"AppParameters"="-start"
una volta salvato come file REG lo aggiungiamo al registro… cosa abbiamo fatto?
Semplice, il Servizio MioServizio eseguirà srvany.exe che ha bisogno dei parametri (chiave Parameters) del programma da far girare; che comprende il path dell’applicativo da far girare come servizio (al parametro di stringa Application) e opzionalmente dei parametri da passare al programma stesso (su AppParameters), il risultato è che quando viene avviato MioServizio esegue il comando C:\servizio\msftpsrvr.exe -start ![]()
I servizi però non girano con i diritti utente, ma con i diritti di sistema; quindi le chiamate al registro che in modalità utente fanno a capo alla chiave HKEY_CURRENT_USER in modalità servizio fanno a capo della chiave HKEY_USERS\.DEFAULT mentre le chiamate ai file utente invece che andare su C:\Documents and Settings\utente vanno in C:\Documents and Settings\Default User, tornando all’esempio di prima mentre girando in modalità utente i parametri del programma vengono memorizzati così (riporto il contenuto del file REG):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\FTPWare\msftpsrvr\msftpsrvr]
"PW"="password"
"Port"="22"
"User"="utente"
"Path"="C:\\"
Avviato come servizio non si possono cambiare, perchè l’applicativo NON parte con l’interfaccia grafica (è un servizio appunto, quindi gira in background), occorrerà quindi crearli a mano come da esempio:
Windows Registry Editor Version 5.00
[HKEY_USERS\.DEFAULT\Software\FTPWare\msftpsrvr\msftpsrvr]
"PW"="password"
"Port"="22"
"User"="utente"
"Path"="C:\\"
Bene, ora avete capito come creare da delle vostre applicazioni dei servizi, e io ho capito come avviare in modalità di servizio un semplice server SFTP!![]()
P.S: Ahh dimenticavo, il servizio viene impostato alla prima installazione con avvio Automatico (che in genere è quello che serve, perchè sennò fare tutto questo?), ma se andate su Pannello di Controllo -> Strumenti di Amministrazione -> Servizi e cercate MioServizio potete farci quello che volete…
2 Commenti
RSS dei Commenti TrackBack Identifier URI
Lascia un Commento

salve, ma ti risulta che funzioni anche su Vista?perchè mi dice che il servizio sul computer locale si è avviato quindi si è arrestato
To confermo, effettivamente su Vista non funziona. i due programmi sono molto vecchi (fanno parte dei software di sviluppo di Windows 2000) e danno un errore di accesso alla memoria. non so sinceramente se questi tool siano presenti/aggiornati nell’SDK di Vista ma quelli per 2000 non vanno di certo!