Iniciando serviços no arquivo em lote no Windows 7

5

Eu tenho um arquivo de lote bastante simples que faz apenas uma coisa - " net start myservice ". Este arquivo em lote é atalho em um grupo de programas pelo instalador para que os usuários possam simplesmente clicar no ícone e fazer com que as coisas iniciem (ou parem). Tudo funciona bem no XP para os usuários com direitos de administrador. Mas as coisas ficam complicadas no Win7, já que o lote precisa ser executado "como administrador" explicitamente, e geralmente os usuários não sabem disso. Então, minha pergunta é como fazer isso amigável? Dizendo aos usuários para clicar com o botão direito e executar como administrador no Win7 e basta clicar no XP é uma espécie de reviravolta estranha. Eu preciso de uma coisa simples inteligente automática.

Eu provavelmente poderia usar "runas / user: administrator" no próprio lote, mas essa conta de "administrador" pode não estar disponível em algumas máquinas. Eu estou procurando uma solução universal para instalar coisas como esta em qualquer caixa do Windows.

Idéias? Como você faria isso?

    
por Dima 22.01.2011 / 12:08

3 respostas

3

Faça o download dos PowerToys de elevação para Windows da Microsoft. Em seguida, você pode incluir scripts no processo de instalação para poder executar a partir do arquivo em lote elevate net start servicename e fornecerá a eles um prompt de elevação do UAC. Contanto que o usuário tenha privilégios administrativos no computador ou consiga que um administrador execute a elevação para eles, ele executará o comando com privilégios elevados e deverá funcionar bem. Não há necessidade de especificar um nome de usuário ou qualquer coisa. Há uma seção inteira nesse artigo sobre a criação de um script que pode detectar se ele está sendo executado com um nível de acesso suficiente e, se não estiver, se elevando.

    
por 03.03.2011 / 06:18
2

Altere as permissões do serviço myservice para permitir que ele seja iniciado por usuários comuns.

Uma maneira fácil de fazer isso é usar o Process Explorer : iniciar o serviço, clicar duas vezes em seu processo no ProcExp, abra a aba Serviços , e use o botão Permissões .

A maneira mais difícil:

C:\>sc sdshow Schedule

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)

O texto exibido é uma Seqüência do descritor de segurança . Cada elemento (...) é uma string ACE .

Por exemplo, anexar isso ao SD permitiria que os usuários controlassem o serviço:

(A;;GX;;;BU)

BU é a string SID para o Construído no grupo Usuários. Para a maioria das finalidades, a concessão de GX ( GENERIC_EXECUTE ) deve ser o suficiente .

Observação: os "direitos" na string da ACE não parecem corresponder de maneira nenhuma às permissões reais concedidas. Por exemplo, "Iniciar serviço" é RP ( READ_PROPERTY ) e "Parar serviço" é WP ( WRITE_PROPERTY ).

    
por 22.01.2011 / 18:35
0

Confira PsTools , ele contém um aplicativo chamado psservice.exe , para iniciar um serviço , usa a seguinte linha de comando:

psservice.exe [\Computer [-u Username [-p Password]]] start <svc>

Se isso for executado por usuários restritos, convém agrupar o arquivo em lotes em um exe para impedir que os usuários vejam a senha do administrador.

    
por 03.03.2011 / 02:09