我正在尝试在.NET 3.5中编写一个小型Windows服务,如果你是“C:\ demofolder”中的新文件,每隔10美元检查一次,然后发送电子邮件。到目前为止,我在下面的代码中已经到了这里,然后在Public Sub New()
中出现错误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
我收到以下错误消息:
在'mcWinService.TestMyService'中多次声明Sub Main':mcWinService.TestMyService.Main(),mcWinService.TestMyService.Main()
Public Shared Sub Main()'具有多个具有相同签名的定义。
设计器生成的类型'mcWinService.TestMyService'中的Public Sub New()'应该调用InitializeComponent方法。
答案 0 :(得分:6)
尝试移动
来自Public Shared Sub Main()的ServiceBase.Run(New TestMyService)
到
受保护的覆盖Sub OnStart
然后删除Public Shared Sub Main()
此外,删除Public Sub New(),因为您可以从“Property Windows”中设置这些属性。 F7从代码切换到设计师视图。
更新1:文件夹监视器的Windows服务示例
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
进一步相关阅读检查:
振作!
答案 1 :(得分:2)
听起来你在另一个项目文件中有另一个Main
方法。在项目范围内搜索单词Main
并查看是否可以找到它。
您还可以通过进入项目的属性对话框并选择TestMyService
作为启动对象而不是Sub Main
来修复该错误。