Come avviare un servizio con determinati parametri di avvio su Windows


17

Come posso avviare un servizio con determinati parametri? In un'altra domanda che ho trovato

net start nome servizio blah

ma se provo questo, mi netlancia un errore di sintassi.

Che cosa sto facendo di sbagliato?

Modifica: per chiarirenet start servicenamefunziona bene, ma ho bisogno di passare i parametri al servizio. Posso farlo manualmenteservices.msccompilando un parametro di avvio prima di avviare il servizio. Ma come posso farlo da una sceneggiatura?

Un'altra modifica: mi dispiace, ma la mia domanda era fuorviante . Nei miei test, avevo molti più parametri e non sono le/blah net startlamentele. In effetti, tutto ciò che inizia con una barra va bene . Quindinet start servicename /blahfunziona,net start servicename blahnon funziona. Dal momento che ho bisognonet start servicename /foo bar, èbarquesto il problema.

Risposte:


29
sc start fooservice arg1 arg2 ...

Non ho idea di come sia riuscita a perdere la tua risposta allora, ma sono sicuramente molto felice di averla trovata ora (per caso). Funziona come un incantesimo, anche con parametri che non iniziano /. Molte grazie!
sbi,

È il 2018 e né "sc start ..." né "net start ..." sembrano funzionare in Windows 10. La modifica del registro funziona serverfault.com/questions/507561/…
MarcH,

8

NET STARTnon ti consentirà di passare parametri arbitrari per quanto ne so (sembra che debbano essere preceduti da un /), credo che il modo corretto sia modificare la chiave di registro appropriata e arrestare / avviare il servizio. Supponendo che il tuo servizio personalizzato si chiama MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

In realtà, un modo migliore è archiviare la configurazione in un luogo noto al servizio, come ad esempio il registro o il file system, e leggere qualunque valore sia necessario. Come puoi vedere, personalizzare la riga di comando è un po 'più doloroso di quanto dovrebbe essere.

Se si tratta per caso di un servizio sviluppato .NET, è possibile creare n copie dell'eseguibile sul proprio file system e far sì che ognuna ottenga automaticamente i parametri dal file app.config appropriato.

Sembra che potresti esserti allontanato troppo dalla finestra di Win32. Dal momento che questo sembra uno sviluppo personalizzato, qualsiasi altra soluzione offerta, sebbene forse non sia il tuo ideale, funzionerà correttamente e sarà un modo più sicuro di procedere.


Ugh. Il servizio accetta un file di configurazione. Utilizza un nome file predefinito o uno passato ad esso. Dal momento che ho bisogno di due diverse istanze del servizio in esecuzione, devo indicarle su diversi file di configurazione. Dover giocherellare con il registro sembra un brutto trucco. Non c'è davvero altro modo (e la GUI)?
sbi,

Goyuix, vedi la mia domanda modificata. net start non accettare parametri, ma solo quelli che iniziano con un /.
sbi,

Goyuix, ora uso sc.exe. Vedi la risposta di Grawity (che in qualche modo sono riuscito a perdere in quel momento).
sbi,

4

È necessario una barra prima di ogni parametro durante l'utilizzo net start. Assicurati anche di citare i parametri che hanno spazi.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"

Guarda di nuovo il mio problema. Ho dei parametri che (devono) iniziare anche con una barra. Come li supererei allora?
sabato

Prova questo: net start nome servizio / "/ foo" / bar
Anche Mien il

3

net start servicename /foo per un singolo argomento

net start servicename /"foo bar" per una stringa o un elenco di args

Nota : questa domanda ha 8 anni, ma non ho la reputazione di commentare la risposta accettata e questo è ancora uno dei migliori risultati di Google nel 2018, quindi volevo chiarire cosa stava funzionando ora per quanto riguarda la modifica finale delle domande.


Nota: ti ho dato un voto, quindi ora la tua risposta è in quarta posizione e hai avuto un bump rep. Divertiti qui! :-)
sabato

1

È necessario utilizzare il nome del servizio effettivo così come appare nel pannello di controllo, servizi. Se contiene spazi, è necessario inserire virgolette attorno al nome del servizio.

Per ottenere il nome del servizio effettivo, digitare net startsenza parametri sul prompt dei comandi. Dovrebbe fornirti un elenco di tutti i servizi in esecuzione in modo da poter ottenere il nome effettivo del servizio. Quindi basta usarenet start <servicename>


Robert, è un mio servizio che installo e poi avvio in uno script. Faccio net start "my-service-name"proprio bene. È ciò net start "my-service-name" /blahche mi dà un messaggio di errore. Ho anche provato net start "my-service-name" -blahe anche questo è un errore di sintassi.
sbi,

0

InstSrv e SrvAny potrebbero essere d'aiuto in questo? Guida e collegamenti


L'ho esaminato brevemente e non la penso così. (Per favore, correggimi se sbaglio.) Ho un vero eseguibile di servizio attivo e funzionante. È solo che (per i test) devo installarlo e avviarlo da uno script e devo passare i parametri al servizio.
sbi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.