void ServiceMain(int argc, char** argv)while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
int error;
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(L"MyServer", (LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
return;
}
error = InitService();
if (!error)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
MEMORYSTATUS memory;
[code=c]
{
STARTUPINFO si;
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_SHOW;
PROCESS_INFORMATION pi;
if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),//測驗先打開記事本,之后測驗m_Server->Start();
NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
}
else
{
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
Sleep(1000);
}
return;
}[/code]
只有第一次啟動服務的時候行程里會啟動 notepad.exe
后面我手動從任務管理器里關掉 notepad.exe的行程,它再也不會重新創建行程了。但是我的服務顯示的一直是運行狀態的呀。
我的做了一個服務器,想開機啟動服務器,并且如果服務器中途死掉,利用服務重新啟動我的服務器(m_Server->Start();)服務器沒有界面。
請問那個while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)為什么只執行一次呢?
uj5u.com熱心網友回復:
void ServiceMain(int argc, char** argv)
{
int error;
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(L"MyServer", (LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
return;
}
error = InitService();
if (!error)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
MEMORYSTATUS memory;
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
STARTUPINFO si;
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_SHOW;
PROCESS_INFORMATION pi;
if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),//測驗先打開記事本,之后測驗m_Server->Start();
NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
}
else
{
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
Sleep(1000);
}
return;
}
uj5u.com熱心網友回復:
這個在win7和win10上都能啟動的服務,到xp系統上怎么會啟動都啟動不了呢,提示 “在本地計算機無法啟動服務,錯誤1053”uj5u.com熱心網友回復:
查看有沒有依附事件沒有啟動。用事件查看器分析日志記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/93942.html
標籤:硬件/系統
上一篇:vc++mfc連接access資料庫,以word檔案形式顯示出來
下一篇:0x7c812afd3處未處理的例外: Microsoft C++ 例外: 記憶體位置 0x0012f134 處的 mwException
