Como iniciar um serviço com determinados parâmetros de inicialização no Windows

17

Como inicio um serviço com certos parâmetros? Em outra pergunta eu encontrei

net start servicename blah

mas se eu tentar isso, netlança um erro de sintaxe para mim.

O que estou fazendo de errado?

Edit: para esclarecernet start servicenamefunciona muito bem, mas eu preciso passar parâmetros para o serviço. Eu posso fazer isso manualmenteservices.mscpreenchendo um parâmetro start antes de iniciar o serviço. Mas como posso fazer isso a partir de um script?

Outra edição: Desculpe, mas minha pergunta foi enganosa . Nos meus testes, eu tinha muitos mais parâmetros e não são as/blah net startqueixas. De fato, qualquer coisa que comece com uma barra é boa . Entãonet start servicename /blahfunciona,net start servicename blahnão funciona. Desde que eu precisonet start servicename /foo bar, ébaresse o problema.

sbi
fonte

Respostas:

29
sc start fooservice arg1 arg2 ...
user1686
fonte
Não tenho ideia de como consegui perder sua resposta naquela época, mas certamente estou muito feliz por encontrá-la agora (por acidente). Isso funciona como um encanto - mesmo com parâmetros que não começam /. Muito obrigado!
SBI
É 2018 e nem "início sc ..." nem "net start ..." parece funcionar no Windows 10. a edição do Registro funciona serverfault.com/questions/507561/...
Março
8

NET STARTnão permitirá que você passe parâmetros arbitrários até onde sei (parece que eles devem ser prefixados com a /), acredito que a maneira correta é modificar a chave do Registro apropriada e interromper / iniciar o serviço. Supondo que seu serviço personalizado se chama MyService:

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

Na verdade, uma maneira melhor é armazenar sua configuração em algum lugar que o serviço conheça, como talvez o registro ou o sistema de arquivos, e ler os valores que você precisa. Como você pode ver, personalizar a linha de comando é um pouco mais doloroso do que deveria ser.

Se por acaso este for um serviço desenvolvido pelo .NET, você poderá criar n cópias do executável em seu sistema de arquivos e obter cada um automaticamente os parâmetros do arquivo app.config apropriado.

Parece que você pode ter ido longe demais da caixa do Win32. Como isso soa como desenvolvimento personalizado, qualquer uma das outras soluções oferecidas, embora talvez não seja o seu ideal, funcionará corretamente e será um caminho mais seguro.

Goyuix
fonte
Ugh. O serviço usa um arquivo de configuração. Ele usa um nome de arquivo padrão ou um passado para ele. Como preciso de duas instâncias diferentes do serviço em execução, preciso apontá-las para diferentes arquivos de configuração. Ter que mexer com o registro parece um truque muito feio. Realmente não existe outra maneira senão essa (e a GUI)?
Sbi
Goyuix, veja minha pergunta editada. net start não aceitar parâmetros, mas apenas aqueles que começam com um /.
SBI
Goyuix, agora eu uso sc.exe. Veja a resposta do grawity (que de alguma forma eu consegui perder na época).
SBI
4

Você precisa de uma barra antes de cada parâmetro ao usar net start. Certifique-se também de citar parâmetros que possuem espaços.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
Even Mien
fonte
Olhe novamente para o meu problema. Eu tenho parâmetros que (precisam) começar com uma barra também. Como eu passaria por eles então?
SBI
Tente isto: net start servicename / "/ foo" / bar
Even Mien 27/03
3

net start servicename /foo para um único argumento

net start servicename /"foo bar" para uma sequência ou lista de argumentos

Nota : esta pergunta tem 8 anos, mas eu não tenho reputação de comentar a resposta aceita e esse ainda é um dos melhores resultados do google em 2018, então eu queria esclarecer o que estava funcionando agora em relação à edição final das perguntas.

MissingL_tter
fonte
Nota: Eu te dei um voto positivo, então agora sua resposta está na 4ª posição, e você tem algum aumento de rep. Divirta-se aqui! :-)
Sb12
1

Você precisa usar o nome do serviço real, como aparece no painel de controle, serviços. Se ele contiver espaços, você deve colocar aspas em torno do nome do serviço.

Para obter o nome do serviço real, digite net startsem nenhum parâmetro no prompt de comando. Ele deve fornecer uma lista de todos os serviços em execução para que você possa obter o nome real do serviço. Então é só usarnet start <servicename>

Robert Williams
fonte
Robert, é um serviço meu que eu instalo e depois inicio em um script. Eu estou net start "my-service-name"bem. É o net start "my-service-name" /blahque me dá uma mensagem de erro. Eu também tentei net start "my-service-name" -blahe isso também é um erro de sintaxe.
Sbi
0

InstSrv e SrvAny poderiam ajudar nisso? Guia e Links

Dave M
fonte
Eu olhei brevemente e acho que não. (Corrija-me se estiver errado.) Tenho um serviço real executável instalado e funcionando perfeitamente. É só que (para testes) eu preciso instalar e iniciá-lo a partir de um script, e preciso passar parâmetros para o serviço.
SBI