0

这是我所做的:

  1. 使用MSDNWindows Service上的在线指南创建了一个。将事件写入EventLog

  2. 使用安装服务installutil.exe,服务名称弹出services.msc

  3. 我手动启动服务发现Start日志被写入EventLog

现在的问题:

'方法已设置为 10000 毫秒,因此每 10 秒后,Timer获取一个条目。这不会发生。只是日志是可见的。当我停止时,日志会被写入。TickEventLogStartStop

启用,Timer检查代码,双重检查,三重检查,但我不知道问题是什么。我试着找到每一个地方,但没有太多关于Windows Service使用 VB.Net的信息

这是我第一次编写服务,并且没有这样做的经验。请帮我找出错误。

源代码


我在Timer'sTick事件中尝试了这个:

Try
        Dim i As Integer = 1 
        evlwe("Tick " & i)
        i += 1      'Thanks for reminding about this @Plutonix and @Matt Wilko
    Catch ex As Exception
        evlwe("Error! " & ex.Message)
    End Try

但还是不行。没有“Tick 1”也没有“错误!” 被添加到事件查看器下的“MyNewLog”文件夹中。只是开始和停止。

我在 OP 中忘记提到的另一件事是我正在从Services.mscWindows 中的应用程序手动启动此服务。那是我做错了吗?

现在我正在尝试Timer通过Try Catch在 . 的StartStop事件中使用来检查Service.

4

2 回答 2

0

问题是Timer我使用的 无法使用,Services因为这种类型Timer属于System.Windows.Forms该类,并且Services无法使用/无法与桌面交互。即他们不能使用窗口来显示内容。因此,System.Windows.Forms.Timer不能与Services.

甚至TimerVisual Studio 中描述的这种类型的摘要也说明了这一点:

Public Class Timer
      Inherits System.ComponentModel.Component
 Member of System.Windows.Forms
Summary:
Implements a timer that raises an event at user-defined intervals. This timer is 
optimized for use in Windows Forms applications and must be used in a window.

正确可用的方法是创建System.Timers实例。更多信息在这里

感谢@Chris Dunaway指出正确的方向。还有其他所有人都努力帮助我。

于 2013-11-04T16:43:26.977 回答
0

可能会抛出并吞下错误:

在刻度事件中,您使用“+”将字符串与整数连接起来,这是无法完成的。

在 VB 中,您用于&连接字符串,或者使用i.ToString或更好地切换Option Strict On,这不会编译,迫使您执行提到的修复之一。

解决方案

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim i As Integer = 0
    evlwe("Tick " & i) 'Use & for string concat, evlwe("Tick " + i) won't work
End Sub

您还应该考虑一些错误处理,然后将错误记录在事件日志中。

于 2013-10-31T12:19:26.003 回答