4

我对 Windows 服务和线程有点陌生,所以我希望我在这里没有犯明显的错误。我开发了一个应用程序,用于在 C# 中运行各种网络维护类型的活动。该应用程序在我的本地机器上完美运行,我决定我希望它作为 Windows 服务运行,因此使用相同的代码进行了适当的更改,并且再次在我的本地机器上运行良好。

当我将它移植到我网络上的服务器上时,我的问题就出现了。非 Windows 服务代码再次运行良好并按预期运行。然而,Windows 服务代码似乎什么也不做。该过程可以正常安装并且可以正常启动/停止,但似乎没有任何代码正在执行,对于在 Visual Studio 中调试 Windows 服务的任何帮助也将不胜感激。这是我的 OnStart 过程中似乎没有执行的代码。

        smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); });
        smThread.Start();

        dailyThread = new Thread(delegate() { dailyEvents(); });
        dailyThread.Start();

因为非 Windows 服务代码有效,所以我不相信我会遇到权限类型问题,除非需要设置不同的权限以允许服务远程执行任务,而不是使用普通 c# 代码执行相同操作.

谢谢,马特

4

2 回答 2

5

感谢您的评论,问题与权限有关。当我单击服务并在“登录”选项卡下并将帐户更改为具有管理权限的帐户时,它工作正常。感谢大家的帮助,非常感谢。

于 2012-12-21T18:55:50.993 回答
2

OnStart将以下行添加为方法中的第一行代码

while(!System.Diagnostics.Debugger.IsAttached)
{
    System.Threading.Thread.Sleep(100);
}

smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); });
smThread.Start();

dailyThread = new Thread(delegate() { dailyEvents(); });
dailyThread.Start();

您可以在循环后的下一行代码中设置断点while并启动服务。然后,从 Visual Studio 中,附加到服务的进程以进行调试。

于 2012-12-21T15:55:41.147 回答