Windows服务不执行代码

时间:2012-12-21 15:40:11

标签: c# windows multithreading service

我对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#代码做同样的事。

谢谢, 马特

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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,附加到服务的进程以进行调试。