Pergunta

Estou tentando instalar um serviço .NET que escrevi.Conforme recomendado pelo MSDN, estou usando o InstallUtil.Mas perdi como posso definir o usuário do serviço padrão na linha de comando ou até mesmo no próprio serviço.Agora, quando o InstallUtil for executado, ele exibirá uma caixa de diálogo solicitando ao usuário as credenciais de um usuário.Estou tentando integrar a instalação do serviço em uma instalação maior e preciso que a instalação do serviço permaneça silenciosa.

Foi útil?

Solução

Acho que posso ter encontrado.No próprio serviço, o componente ServiceProcessInstaller criado automaticamente possui uma propriedade "Conta" que pode ser definida como "LocalService", "LocalSystem", "NetworkService" ou "User".O padrão era "Usuário", que deve ter exibido o prompt.

Outras dicas

Como você percebeu, Karim, a propriedade "Conta" é a solução aqui.Para aqueles interessados ​​nas diferenças entre os contextos de segurança definidos por esta propriedade:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

Acima, usando InstallUtil ou SC, gosto da ideia de criar um AUTO INSTALADOR:

http://www.codeproject.com/KB/dotnet/WinSvcSelfInstaller.aspx

mesmo que eu tenha encontrado isso na documentação do .Net 1.1:

O Classe ManagedInstaller O tipo suporta a infraestrutura do .NET Framework e não se destina a ser usado diretamente do seu código.

Tenha também em mente o Utilitário SC.exe que não requer a instalação do visual studio.Você pode simplesmente copiar este exe para o servidor onde deseja criar o serviço ou até mesmo executá-lo remotamente.Use o obj parâmetro para especificar um usuário.

Aparentemente existe uma GUI para esta ferramenta, mas eu não a usei.

Você está sendo solicitado a fornecer a conta para executar o serviço ou os direitos para instalar o serviço?Para o segundo, instalar como administrador deve evitar que isso aconteça.Para o primeiro, você deve adicionar um ServiceProcessInstaller ao seu instalador.

Acredito que a superfície de design de um serviço tenha um link para criar um instalador de projeto.Nesse designer, você pode adicionar um instalador de processo do tipo System.ServiceProcess.ServiceProcessInstaller.As propriedades deste objeto permitem definir a conta a ser usada para o serviço.

InstallUtil possui opções de linha de comando que podem evitar prompts ao usar "Usuário" como tipo de conta. /username e /password são usados ​​para configurar a conta no momento da instalação.

Uso:

installutil.exe /username=user /password=password yourservice.exe

O que você pode querer é ter um arquivo de configuração onde o instalador possa ler e instalar o serviço.

Para fazer isso, adicione um instalador de serviço ao seu projeto e sobrecarregue o método install.Neste método, defina o nome de usuário e a senha:

public override void Install(IDictionary stateSaver)
{
    serviceProcessInstaller1.Username="<username>";
    serviceProcessInstaller1.Password="<password>";
    base.Install(stateSaver);
}

Se você tentar definir o nome de usuário e a senha no construtor, esses valores serão substituídos, portanto, substitua "Instalar" para fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top