2010-12-07 38 views
2

Je viens de créer un service Windows test simple et j'ai des problèmes. Je suis nouveau dans les services Windows, donc je ne sais pas si je fais cela correctement.Installation d'un service Windows .net 2008

namespace testWindowsService 
{ 
    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     {InitializeComponent();} 

     protected override void OnStart(string[] args) 
     { 
      FileStream fs = new FileStream(@"c:\temp\started.txt", FileMode.OpenOrCreate, FileAccess.Write); 
      StreamWriter m_streamWriter = new StreamWriter(fs); 
      m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 

      m_streamWriter.WriteLine("Service Started on \n" + DateTime.Now.ToShortDateString() + " at " + DateTime.Now.ToShortTimeString()); 
      m_streamWriter.Flush(); 
      m_streamWriter.Close(); 
     } 

     protected override void OnStop() 
     { 
      FileStream fs = new FileStream(@"c:\temp\stopped.txt", FileMode.OpenOrCreate, FileAccess.Write); 
      StreamWriter m_streamWriter = new StreamWriter(fs); 
      m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 

      m_streamWriter.WriteLine("Service Stopped \n" + DateTime.Now.ToShortDateString() + " at " + DateTime.Now.ToShortTimeString()); 
      m_streamWriter.Flush(); 
      m_streamWriter.Close(); 
     } 
    } 
} 

Alors je construit le projet et a ouvert Invite de commandes à partir de Démarrer -> Tous les programmes -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Invite de commandes. À l'invite j'ai couru:

installutil C:\Users\myUser\Documents\MyServices\testWindowsService\testWindowsService\bin\Debug\testWindowsService.exe 

Mais je reçois l'erreur:

No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\Users\myUser\Documents\MyServices\testWindowsService\testWindowsService\bin\Debug\testWindowsService.exe assembly. 

J'ai essayé googler mais trouvé beaucoup d'impasses et réponses demi.

Merci

+0

Vous n'avez pas besoin de connecter le service démarrer et arrêter, cela sera fait pour vous et les entrées apparaîtront dans le journal des événements. –

+0

Y a-t-il une chance que vous acceptiez la réponse si elle résolvait votre problème? –

Répondre

4

Vous avez besoin d'un programme d'installation. Avoir une lecture à travers thesearticles pour voir un exemple. En particulier:

[RunInstallerAttribute(true)] 
public class ProjectInstaller : Installer{ 
    private ServiceInstaller serviceInstaller1; 
    private ServiceProcessInstaller processInstaller; 

    public MyProjectInstaller(){ 
     // Instantiate installers for process and services. 

     processInstaller = new ServiceProcessInstaller(); 
     serviceInstaller1 = new ServiceInstaller(); 

     // The services run under the system account. 

     processInstaller.Account = ServiceAccount.LocalSystem; 

     // The services are started manually. 

     serviceInstaller1.StartType = ServiceStartMode.Manual; 
     serviceInstaller2.StartType = ServiceStartMode.Manual; 

     // ServiceName must equal those on ServiceBase derived classes. 

     serviceInstaller1.ServiceName = "Hello-World Service 1"; 

     // Add installers to collection. Order is not important. 

     Installers.Add(serviceInstaller1); 
     Installers.Add(processInstaller); 
    } 
} 

Vous pouvez ajouter facilement une classe d'installation à votre projet dans VS2008, il apparaît comme un type d'élément lors de l'ajout d'un nouvel élément.

+0

Comme dans System.Configuration.Install? – Jeremy

+0

Oui. Les deux liens que j'ai publiés indiquaient 'System.Configuration.Install' dans leur contenu. –

+0

Désolé, je n'ai pas vu le lien avant de commenter ... pensé à la suppression du commentaire. – Jeremy