2012-12-21 56 views
3

我对Windows服务和线程有点新,所以我希望我不会在这里犯一个明显的错误。我有一个应用程序,用于在C#中运行各种网络维护类型活动。该应用程序在我的本地机器上完美工作,我决定我希望它作为一个Windows服务运行,所以使用相同的代码进行了适当的更改,并再次在我的本地机器上工作。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#代码做同样的事情。

谢谢, 马特

+1

你能告诉我们你用来连接服务的代码吗?当你说windows服务时,你的意思是一个WCF服务? –

+0

它可能是许可问题。运行服务的帐户是什么?您的桌面应用程序可以以管理员身份运行,该服务可以作为不具有权限的另一个运行。 – urlreader

+0

如果您运行的是WCF Web服务,则可能需要更改应用程序池帐户设置。默认的IIS_IUSR帐户没有很多权限。你运行WCF吗? –

回答

3

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

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中,附加到服务进程进行调试。

+0

好我会试试这个谢谢! – mgrenier