【问题标题】:windows service code in c ,where to write service logic code?c语言中的windows服务代码,服务逻辑代码在哪里写?
【发布时间】:2012-12-11 07:34:53
【问题描述】:

标题很笼统,但我的疑问是具体的。 我怀疑在哪里编写服务逻辑代码(在服务控制处理程序中或在 ServiceMain 中),就像服务将执行的任何功能一样。它在 ServiceMain 中吗? 我在 MSDN 上查看了这些与服务相关的主题。但是,并没有帮助我 http://msdn.microsoft.com/en-us/library/ms687414%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ms685984%28v=vs.85%29.aspx

基本上,我想使用服务在 Windows 上启动一个套接字侦听。这个监听套接字逻辑代码将在服务文件中,因为我将使用 winexe 实用程序将此服务从 linux 框发送到 Windows 框。目前,winexe 在 windows 上发送 winexesvc 服务文件。因此,最终我将替换现有的 winexesvc 服务,以便它在 Windows 上发送时执行对特定端口功能的侦听。 (服务骨架将保持不变,但其任务执行逻辑会改变,对吧?)。请告诉我是否遗漏了什么。 提前致谢。

【问题讨论】:

    标签: c windows service winsock winexe


    【解决方案1】:

    服务控制处理程序应该只处理发送到服务的控制消息(您链接的示例中显示的是SERVICE_CONTROL_STOPSERVICE_CONTROL_INTERROGATE)。这些控制消息从环境发送到服务。

    当所有必需的初始化完成后,您的服务逻辑应该在ServiceMain 函数中实现。在您帖子中 URL 的示例中,服务逻辑代码被放入 SvcInit 函数中(对于实现服务逻辑的函数,这可能不是最合适的名称)。

    【讨论】:

    • 是的,实际上在winexe代码中,他们已经在serviceInitialization函数中实现了服务逻辑代码,其中为server_loop创建了一个新线程。我还没有测试更改后的服务代码,对于我正在寻找的东西来说仍然很好。但是,找不到 ServiceMain 函数。可以用不同的名称调用 ServiceMain 函数吗?
    • 是的,它可以有任何名称。您可以在传递给StartServiceCtrlDispatcher() 函数的调度表中找到它。
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 2018-06-19
    • 2011-05-07
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多