能力值:
( LV2,RANK:10 )
2 楼
不会 ,同问
能力值:
( LV2,RANK:10 )
3 楼
在SCM(服务管理器)中注册
1.在main中添写一个SERVICE_TABLE_ENTRY 结构,两个成员,一个是服务名,一个是服务函数(ServiceMain)
使用StartServiceCtrlDispatcher注册上述结构体
2.SCM会在打开服务时调用ServiceMain(),主要是用来调用RegisterServiceCtrlHandler()为服务注册一个控制函数(Handler),功能是与SCM通信进行服务管理。
3.服务功能实现函数由ServiceMain()启动一个专用线程来完成
4.具有以上模块的程序才能注册为服务,使用OpenSCManager()和CreateService()
可以去搜一下己有框架代码。
能力值:
( LV2,RANK:10 )
4 楼
谢了啦,非常感谢
能力值:
( LV9,RANK:610 )
5 楼
冷风有一个服务程序框架,可以参考一下
能力值:
( LV7,RANK:100 )
6 楼
楼主可以参考下这个,下面是安装和卸载NT服务的函数,函数中安装的服务程序就是程序本身,如果你要安装其他程序的话稍作修改就行了。
网上有篇关于windows NT服务程序编程的文章,写的很好,楼主可以看看。
http://tieba.baidu.com/f?kz=137973986
这个是安装NT服务的函数:
BOOL InstallService()
{
char strDir[1024];
SC_HANDLE schSCManager,schService;
GetCurrentDirectory(1024,strDir);
GetModuleFileName(NULL,strDir,sizeof(strDir));
char chSysPath[1024];
GetSystemDirectory(chSysPath,sizeof(chSysPath));
strcat(chSysPath,"\\WindowsMgr.exe");
if(!CopyFile(strDir,chSysPath,FALSE))
printf("Copy File OK\n");
strcpy(strDir,chSysPath);
//打开service control manager database
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(schSCManager==NULL)
{
printf("open scmanger failed,maybe you do not have the privilage to do this\n");
return false;
}
LPCTSTR lpszBinaryPathName=strDir;
schService=CreateService(schSCManager,"WindowsMgr","Windows Manger Control",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
lpszBinaryPathName,
NULL,NULL,NULL,NULL,NULL);
if(schService==NULL)
{
printf("faint,we failed just because we invoke createservices failed\n");
return false;
}
CloseServiceHandle(schService);
return true;
}
这个是删除NT服务的函数:
BOOL DeleteService() {
SC_HANDLE schSCManager;
SC_HANDLE hService;
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
char chSysPath[1024];
GetSystemDirectory(chSysPath,sizeof(chSysPath));
strcat(chSysPath,"\\WindowsMgr.exe");
if (schSCManager == NULL)
{
printf("faint,open scmanger failed\n");
return false;
}
hService=OpenService(schSCManager,"WindowsMgr",SERVICE_ALL_ACCESS);
if (hService == NULL)
{
printf("faint,open services failt\n");
return false;
}
if(DeleteFile(chSysPath)==0)
{
printf("Dell file Failure !\n");
return false;
}
else printf("Delete file OK!\n");
if(DeleteService(hService)==0)
return false;
if(CloseServiceHandle(hService)==0)
return false;
else
return true;
}
能力值:
( LV3,RANK:20 )
8 楼
delphi里面有专门开发服务程序模板