【问题标题】:Windows service not executing codeWindows 服务不执行代码
【发布时间】:2012-12-21 15:40:11
【问题描述】:

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

谢谢, 马特

【问题讨论】:

  • 你能告诉我们你用来连接服务的代码吗?当您说 Windows 服务时,您是指 WCF 服务吗?
  • 可能是权限问题。运行该服务的帐户是什么?您的桌面应用程序可以以管理员身份运行,该服务可以作为没有权限的其他服务运行。
  • 如果您运行的是 WCF Web 服务,您可能需要更改应用程序池帐户设置。默认的 IIS_IUSR 帐户没有很多权限。你在运行 WCF 吗?
  • “远程执行任务”是什么意思?服务一般无权访问网络资源。您必须更改服务的登录帐户。
  • 不是WCF服务,如何设置服务以管理员身份运行?

标签: c# windows multithreading service


【解决方案1】:

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

【讨论】:

    【解决方案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 中附加到服务的进程以进行调试。

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多