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(),則可以附加一個調試器。 –