2017-09-06 87 views
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

+0

@RbMm服務應該留在所有的時間和返回每當一個新的USB已插入序列號,當一個新的USB中插入。計算機驅動程序獲取供應商ID和產品ID並將它們發送到執行該命令的服務,然後返回相應的序列號,這就是爲什麼我需要該服務停留在循環中並檢查驅動程序的任何輸入。 – qwn

+0

您需要添加錯誤檢查,以便您可以找到代碼失敗的位置。此外,如果您在調用StartServiceCtrlDispatcher之前在main()中放置了一個適度的Sleep(),則可以附加一個調試器。 –

回答

0

好吧,我明白了,這是一個一堆錯誤。

我已經設置了FltSendMessage的計時器太長(100秒),我沒有初始化FilterGetMessage中的OVERLAPPED結構,這意味着服務處於等待狀態,直到從驅動程序輸入任何信息。

它現在全部整理出來。感謝所有的幫助。

編輯: 我也搞砸了字符串匹配其斷開服務

相關問題