这是我第一次制作Windows服务应用。我正在尝试使用Windows服务应用程序将文件从一个文件夹移动到另一个文件夹。它会每10秒钟完成一次。 这是我正在使用的代码。当我在Windows窗体应用程序上使用它时它可以正常工作,但是当我在Windows服务应用程序上使用它时它不起作用。
如果我在OnStart中使用它,Timer1_Tick中的代码就可以工作。但是在计时器中不起作用。
Protected Overrides Sub OnStart(ByVal args() As String)
Timer1.Enabled = True
End Sub
Protected Overrides Sub OnStop()
Timer1.Enabled = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim FileToMove As String
Dim MoveLocation As String
Dim count1 As Integer = 0
Dim files() As String = Directory.GetFiles("C:\Documents and Settings\dmmc.operation\Desktop\Q8")
Dim pdfFiles(100) As String
For i = 0 To files.Length - 1
If Path.GetExtension(files(i)) = ".pdf" Then
pdfFiles(count1) = files(i)
count1 += 1
End If
Next
For i = 0 To pdfFiles.Length - 1
If pdfFiles(i) <> "" Then
FileToMove = pdfFiles(i)
MoveLocation = "C:\Documents and Settings\dmmc.operation\Desktop\Output\" + Path.GetFileName(pdfFiles(i))
If File.Exists(FileToMove) = True Then
File.Move(FileToMove, MoveLocation)
End If
End If
Next
End Sub
答案 0 :(得分:1)
如果没有实例化Form,Windows.Forms.Timer将无法运行。您应该使用System.Timers.Timer:
Private WithEvents m_timer As System.Timers.Timer
Protected Overrides Sub OnStart(ByVal args() As String)
m_timer = New System.Timers.Timer(1000) ' 1 second
m_timer.Enabled = True
End Sub
Private Sub m_timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles m_timer.Elapsed
m_timer.Enabled = False
'Do your stuff here
m_timer.Enabled = True
End Sub
答案 1 :(得分:0)
我还构建了一项服务,该服务可以将拖放到文件夹中的文件移动,但我正在使用FileSystemWatcher。 FileSystemWatcher允许我在创建新文件时移动文件,在SQL数据库中创建条目并在完成所有操作后发送电子邮件通知。
这是我设置FileSystemWatcher的方式
不幸的是,我每天都有实例无法成功移动文件。我得到正在使用的文件的IO异常。将复制文件,但目标文件夹中的文件为0kb。
我正在尝试对其进行故障排除,并且设法进行了远程调试,但是我仍然没有弄清楚自己在做什么错。
我得到的最常见错误是:错误:System.IO.IOException:该进程无法访问文件'fileName.pdf',因为它正在被另一个进程使用。
此错误没有意义,因为在我的服务尝试移动该文件之前该文件不存在...
任何进一步的帮助,将不胜感激。