0
因此,我创建了一个Windows服务,它在Windows 10中作为服务在Windows 7中作为控制台应用程序工作,但在Windows 7作为服务运行时它会自动停止。Windows服务作为控制台应用程序运行,但作为服务自动关闭
我按照这里DevX windows service steps
服务谈判的教程,我的司机,并通过执行CMD wmic diskdrive get pnpdeviceid
提供特定设备的SERIALNUMBER。
最后这里的主要功能和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 Test start= auto
@RbMm服务应该留在所有的时间和返回每当一个新的USB已插入序列号,当一个新的USB中插入。计算机驱动程序获取供应商ID和产品ID并将它们发送到执行该命令的服务,然后返回相应的序列号,这就是为什么我需要该服务停留在循环中并检查驱动程序的任何输入。 – qwn
您需要添加错误检查,以便您可以找到代码失败的位置。此外,如果您在调用StartServiceCtrlDispatcher之前在main()中放置了一个适度的Sleep(),则可以附加一个调试器。 –