2010-08-10 7 views
3

Je suis en train d'écrire un petit service Windows dans .NET 3.5, vérifiez que tous les 10 mn ou si toi sont de nouveaux fichiers dans « C: \ demofolder », puis envoyer un courrier électronique à. Jusqu'à présent, je l'ai fait ici, comme dans le code suivant, puis il y a erreur dansservice Windows

Imports System 
Imports System.Timers 
Imports System.ServiceProcess 
Public Class TestMyService 

    ' A timer that controls how frequenty the example writes to the 
    ' event log. 
    Private serviceTimer As Timer 

    Public Sub New() 

     ' Set the ServiceBase.ServiceName property. 
     ServiceName = "TestMyService Service" 

     ' Configure the level of control available on the service. 
     CanStop = True 
     CanPauseAndContinue = True 
     CanHandleSessionChangeEvent = True 

     ' Configure the service to log important events to the 
     ' Application event log automatically. 
     AutoLog = True 

    End Sub 

    Protected Overrides Sub OnStart(ByVal args() As String) 
     ' Add code here to start your service. This method should set things 
     ' in motion so your service can do its work. 
    End Sub 

    Protected Overrides Sub OnStop() 
     ' Add code here to perform any tear-down necessary to stop your service. 
    End Sub 

Public Shared Sub Main() 

    ' Create an instance of the TestMyService class that will write 
    ' an entry to the Application event log. Pass the object to the 
    ' shared ServiceBase.Run method. 
    ServiceBase.Run(New TestMyService) 

End Sub 


End Class 

Sub New Public() Je suis le message d'erreur suivant:

Sub Main' est déclarée plus une fois dans 'mcWinService.TestMyService': mcWinService.TestMyService.Main(), mcWinService.TestMyService.Main()

Public Partagé Sub Main() 'a plusieurs définitions avec des signatures identiques.

Public Sub New() » dans le type concepteur généré 'mcWinService.TestMyService' devrait appeler la méthode InitializeComponent.

Répondre

6

Essayez de déplacer

ServiceBase.Run (New TestMyService) du public Shared Sub Main()

à

Dérogations Sous OnStart protégé

puis supprimez Public Shared Sub Main()

En outre, retirer Public Sub New(), parce que vous pouvez définir les propriétés de "Windows Property". F7 pour passer du code à la vue du concepteur.

Mise à jour 1: Exemple de service Windows pour le dossier surveiller

Imports System.Net.Mail 
Imports System.Net 
Imports System.Timers 
Imports System.IO 

Public Class DemoFolderMonitor 

    Private Shared timer As System.Timers.Timer 
    Private Shared timerInterval As Integer 

    Protected Overrides Sub OnStart(ByVal args() As String) 
     ' Add code here to start your service. This method should set things 
     ' in motion so your service can do its work. 

     ' Use the EventLog object automatically configured by the 
     ' ServiceBase class to write to the event log. 
     'EventLog.WriteEntry(String.Format("DemoFolderMonitor Service starting.")) 

     ' Set the Interval (1sec = 1000 milliseconds). 
     timerInterval = 2000 
     timer = New System.Timers.Timer(timerInterval) 
     EventLog.WriteEntry("DemoFolderMonitor Service starting.") 

     ' Hook up the Elapsed event for the timer. 
     AddHandler timer.Elapsed, AddressOf WatchFolder 

     timer.Interval = timerInterval 
     timer.Enabled = True 

    End Sub 

    Protected Overrides Sub OnStop() 
     ' Add code here to perform any tear-down necessary to stop your service. 
     EventLog.WriteEntry("DemoFolderMonitor Service stopping...") 

    End Sub 

    Protected Sub WatchFolder() 

     Dim watcher As New FileSystemWatcher 
     watcher.Path = "C:\Demo\" 

     watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName) 

     'watch all file types. 
     watcher.Filter = "*.*" 
     ' Add event handlers. 
     AddHandler watcher.Changed, AddressOf OnChanged 
     AddHandler watcher.Created, AddressOf OnChanged 
     AddHandler watcher.Deleted, AddressOf OnChanged 
     AddHandler watcher.Renamed, AddressOf OnRenamed 

     ' Begin watching. 
     watcher.EnableRaisingEvents = True 

    End Sub 

    'Define the event handlers. 
    Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs) 
     ' Specify what is done when a file is changed, created, or deleted. 
     Dim changeLog = "File: " & e.FullPath & " " & " | Action: " & e.ChangeType.ToString 
     WriteChangeLog(changeLog) 

    End Sub 

    Private Shared Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs) 
     ' Specify what is done when a file is renamed. 
     Dim changeLog = "File" & e.OldFullPath & " " & "renamed to" & " " & e.FullPath 
     WriteChangeLog(changeLog) 

    End Sub 

    'Custom action. You can either send an e-mail or write change to local file 
    'In this example I write change to local file 
    Private Shared Sub WriteChangeLog(ByVal changeLog As String) 

     'Create a text file and write the change log to the text file 
     Dim filename As String = DateTime.Now.ToString("hh-mm-ss") & ".txt" 
     Dim writer As StreamWriter 
     writer = File.CreateText("C:\ChangeLog\" & filename) 
     writer.WriteLine("Datetime Log at {0} Log Message: {1}", DateTime.Now.ToString("MMM-dd-yyyy @ hh:mm:ss tt"), changeLog) 
     writer.Close() 

    End Sub 

End Class 

Pour vérification de lecture plus connexe:

Cheer!

+0

Merci pour l'exemple et les liens. – Narazana

2

Cela ressemble à une autre méthode Main dans un autre fichier de projet. Faites une recherche à l'échelle du projet pour le mot Main et voyez si vous pouvez le trouver.

Vous pouvez également corriger cette erreur en accédant à la boîte de dialogue des propriétés du projet et en sélectionnant TestMyService comme objet de démarrage plutôt que Sub Main.

+0

Il parTagées Sub Main() dans le Service1.designer.vb Je pense qu'il est généré automatiquement. J'ai sélectionné TestMyService en tant qu'objet de démarrage. Erreur toujours là. – Narazana

+0

@Morron: Je ne comprends pas que quand j'ajouter un service. À moins que vous avez écrit beaucoup de code déjà pour ce projet, il serait peut-être plus facile de commencer à partir de zéro, il suffit de créer un nouveau projet de service, etc.Cet article montre les étapes que vous devez prendre: http://www.codeguru.com/vb/gen/vb_system/services/article.php/c4825 –

+0

C'est un tout nouveau projet. Je l'ai créé il y a 40mn pour apprendre à écrire le service Windows. – Narazana