Pertanto, prima del post sul "che cosa ho fatto", approfitto di queste pagine per pubblicare il risultato e ridurre i tempi di chi, come me, cerca di fare delle cose un pelo piú complesse della norma.
Avviso: è un articolo tecnico e il tema è "aggiungere dei parametri ad un servizio windows".
Un pò tecnico, è vero, ma ho passato 8 ore (OTTO ORE) otto a cercare questa informazione.
Tra i software che vengono installati nei PC con MS-Windows ci sono quelli che rimangono residenti e attivi.
Nei sistemi Linux sono normali programmi eseguiti da "cron", in Windows si chiamano "Windows Services" e vanno registrati nel sistema.
Nulla di trascendentale, ci sono delle utilities che lo fanno, come InstallUtil o SC.
il problema che mi ha fatto perdere un sacco di tempo è stato: come si fa fare in modo che al servizio vengano passati dei parametri personali?
Una cosa utile e semplicissima: quando si esegue un programma se ne può gestire il comportamento per esempio passando sulla riga di comando dei parametri personali. Questa cosa semplicissima, quando si tratta dei servizi Windows non è, per assurdo, documentata dalla stessa produttice del sistema operativo, mamma Microsoft.
Quindi si cerca disperatamente su Internet e si trovano un sacco articoli di molti tecnici confusi, in cui vengono proposte soluzioni incredibilmente complicate o scorrette.
Le soluzioni disponibili
- InstallUtil.exe
È uno strumento che non risolve, non esiste modo di obbligarlo a capire che deve registrare parametri esterni all'installazione del servizio. - Righe di programmazione
Tutte le soluzioni che ho trovato pubblicate su internet e che includono righe di programmazione speciali sono soluzioni specifiche per sistema operativo e funzionano ovviamente solo con alcune versioni di Windows. - Usare SC.exe
Attraverso SC è possibile passare dei parametri particolari sulla riga di comando. Evviva. Rabbrividiamo brrrrrr (cit).
> sc create -help DESCRIZIONE: Crea una voce di servizio nel Registro di sistema e nel database del servizio. SINTASSI: sc <server> create [nome servizio] [binPath= ] <opzione1> <opzione2>... OPZIONI: NOTA: il nome dell'opzione include il segno di uguale. È necessario inserire uno spazio tra il segno di uguale e il valore. type= <own|share|interact|kernel|filesys|rec> (predefinito = own) start= <boot|system|auto|demand|disabled|delayed-auto> (predefinito = demand) error= <normal|severe|critical|ignore> (predefinito = normal) binPath= <NomePercorsoBinario> group= <GruppoOrdineCaricamento> tag= <yes|no> depend= <Dipendenze (separate da / (barra))> obj= <NomeAccount|NomeOggetto> (predefinito = LocalSystem) DisplayName= <nome visualizzato> password= <password>
Nel caso specifico al mio programma pippo.exe, registrato come servizio, voglio che venga passato il parametro "basepath" il cui valore è "pluto", in pratica il corrispondente di:
C:\>pippo.exe -basepath="pluto"
Per ottenere che questa sia la riga eseguita da service dovrò usare la seguente sintassi di SC:
C:\>sc create MyServiceName binpath= "\"C:\pippo.exe\" -basepath=\"pluto\" " displayname= "This is my service display name" depend= Tcpip start= auto
... E come si può vedere tutto il trucco sta nel modo in cui si usa \", con buona pace di chi, come me, ha buttato nel cestino circa 8 ore per avere questa informazione.
Grazie mamma MS.
Nessun commento:
Posta un commento
I commenti sono liberi, ho scelto di moderarli per evitare quelli inutili, la pubblictà lo spam e quelli scurrili.