Quando crio um novo serviço do Windows no Visual Studio 2010, recebo a mensagem informando o uso do InstallUtil e net start para executar o serviço.
Eu tentei as seguintes etapas:
- Criar novo projeto Arquivo -> Novo -> Projeto -> Serviço do Windows
- Nome do Projeto: TestService
- Crie o projeto como está (construtor Service1, OnStart, OnStop)
- Abra o prompt de comando, execute "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe
- Execute net start TestService .
Saída da etapa 4
Executando uma instalação transacionada.
Iniciando a fase de instalação da instalação.
Consulte o conteúdo do arquivo de log para obter o progresso do assembly C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe.
O arquivo está localizado em C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Instalando o assembly 'C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Os parâmetros afetados são:
logtoconsole =
arquivo de log = C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestService \ Est estervervice \ obj \ x86 \ Debug \ TestService.InstallLog
assemblypath = C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
Não foi possível encontrar nenhum instalador público com o atributo RunInstallerAttribute.Yes no assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe.
A fase de instalação foi concluída com êxito e a fase de confirmação está começando.
Consulte o conteúdo do arquivo de log para obter o progresso do assembly C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe.
O arquivo está localizado em C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Confirmando o assembly 'C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Os parâmetros afetados são:
logtoconsole =
arquivo de log = C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestService \ Est estervervice \ obj \ x86 \ Debug \ TestService.InstallLog
assemblypath = C: \ Usuários \ nome de usuário \ Documentos \ Visual Studio 2010 \ Projetos \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
Não foi possível encontrar nenhum instalador público com o atributo RunInstallerAttribute.Yes no assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe.
Remova o arquivo InstallState porque não há instaladores.
A fase de confirmação foi concluída com êxito.
A instalação transacionada foi concluída.
Saída da etapa 5
O nome do serviço é inválido.
Mais ajuda está disponível, digitando NET HELPMSG 2185.
Olhando para:
Parece que você pode não ter uma classe de instalador no seu código. Esta é uma classe que herda
Installer
que diráinstallutil
como instalar seu executável como um serviço.Ps Eu tenho meu próprio debuggable modelo pouco de auto-instalação / serviço Windows aqui, que você pode copiar o código a partir de ou uso: debuggable, auto-instalação Windows Service
fonte
Aqui está uma maneira alternativa de criar o instalador e se livrar dessa mensagem de erro. Também parece que o VS2015 express não possui o item de menu "Adicionar instalador".
Você só precisa criar uma classe e adicionar o código abaixo e a referência System.Configuration.Install.dll.
fonte
Dois problemas típicos:
fonte
Outro possível problema (que eu encontrei):
Certifique-se de que a
ProjectInstaller
classe sejapublic
. Para ser sincero, não tenho certeza de como exatamente fiz isso, mas adicionei manipuladores de eventos aProjectInstaller.Designer.cs
, como:this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
Eu acho que durante o processo automático de criação da função manipuladora
ProjectInstaller.cs
mudou a definição de classe depublic class ProjectInstaller : System.Configuration.Install.Installer
para
partial class ProjectInstaller : System.Configuration.Install.Installer
substituindo a
public
palavra-chave porpartial
. Então, para corrigi-lo, deve serpublic partial class ProjectInstaller : System.Configuration.Install.Installer
Eu uso o Visual Studio 2013 Community edition.
fonte
Alteração furtiva no VS 2010 e .NET 4.0 e posterior
Não foi possível encontrar nenhum instalador público com o atributo RunInstallerAttribute.Yes
Há uma alteração de alias ou limpeza do compilador no .NET que pode revelar esse pequeno ajuste para o seu caso específico.
Se você tem o seguinte código…
Pode ser necessário atualizá-lo para
É como um alias alterado nos bastidores em tempo de compilação ou em tempo de execução e você receberá esse comportamento de erro. A alteração explícita acima para RunInstallerAttribute (true) corrigiu-a em todos os nossos cenários de instalação em todas as máquinas.
Depois de adicionar o instalador do projeto ou serviço, verifique o RunInstaller "true" (true) e altere-o para o novo RunInstallerAttribute (true)
fonte
Outro problema que encontrei: verifique se a classe derivada do Installer (normalmente
ProjectInstaller
) está no topo da hierarquia do namespace, tentei usar uma classe pública dentro de outra classe pública, mas isso resultou no mesmo erro antigo:Não foi possível encontrar nenhum instalador público com o atributo RunInstallerAttribute.Yes
fonte