c - Windows 服务作为控制台应用程序运行,但作为服务自动关闭

标签 c windows windows-services

因此,我创建了一个 Windows 服务,它在 Windows 10 中作为服务运行,在 Windows 7 中作为控制台应用程序运行,但是当在 Windows 7 中作为服务运行时,它会自动停止。

我已按照此处的教程 DevX windows service steps 进行操作

该服务与我的驱动程序对话,并通过执行 cmd wmic diskdrive get pnpdeviceid 提供特定设备的序列号。

最后是main函数和serviceMain函数

 VOID
 WINAPI ServiceMain(
     DWORD argc,
     LPTSTR *argv
 )
 /*
  Description:
    Service Entry Point of the service.
 */
 {
statusHandle = RegisterServiceCtrlHandler(SERVICE_NAME,  ServiceCtrlHandler);

if (statusHandle == NULL)
    return;

// Tell the service controller we are starting
RtlZeroMemory(&serviceStatus, sizeof(serviceStatus));
serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
serviceStatus.dwControlsAccepted = 0;
serviceStatus.dwCurrentState = SERVICE_START_PENDING;
serviceStatus.dwWin32ExitCode = 0;
serviceStatus.dwServiceSpecificExitCode = 0;
serviceStatus.dwCheckPoint = 0;

HRESULT result = ConnectToPort(&port);

serviceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(statusHandle, &serviceStatus);

while (serviceStatus.dwCurrentState == SERVICE_RUNNING) {
    result = GetInformationAndSendSerialNumber(&port);
    if(SUCCEEDED(result)) Sleep(5000);
}

serviceStatus.dwControlsAccepted = 0;
serviceStatus.dwCurrentState = SERVICE_STOPPED;
serviceStatus.dwWin32ExitCode = 0;
serviceStatus.dwCheckPoint = 3;
SetServiceStatus(statusHandle, &serviceStatus);
}

INT 
main(
INT argc,
PCHAR *argv
)
{
SERVICE_TABLE_ENTRY serviceTableEntry[] = 
{
    { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain},
    {NULL, NULL}
};
StartServiceCtrlDispatcher(serviceTableEntry);
return 0;
}

`

这就是我安装服务的方式

sc create Test binpath= C:\Test.exe sc config 测试开始=自动

最佳答案

好吧,我明白了,这是一堆错误。

我为 FltSendMessage 设置的计时器太长(100 秒),而且我没有初始化 FilterGetMessage 中的 OVERLAPPED 结构,这意味着服务处于等待状态,直到来自驱动程序的任何输入。

现在一切都已经解决了。感谢您的所有帮助。

编辑: 我还搞砸了字符串匹配,从而断开了服务

关于c - Windows 服务作为控制台应用程序运行,但作为服务自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074598/

相关文章:

c# - 如何在 .NET 中自动更新我的 Windows 服务?

c - 我一次可以在 TCP 套接字上写入多少字节?

c++ - 使用 Xcode 在 MacOS X 上安装 GMP

windows - Control.Enter 和 Control.GotFocus 事件有什么区别?

c# - Windows 服务启动和 Exe

ssl - 如何为 HTTPS 配置/启用 SSL 以及创建 Windows 服务的步骤?

c - 尝试理解这个 printf 格式化输出

c - `int const a[5]` 到底是什么意思?

python - 如何使用Python(Windows)获取所有IP地址?

c++ - 使用 C++ 的安全套接字连接