首页
社区
课程
招聘
[求助]如何把程序注册为系统服务
发表于: 2009-7-20 18:38 7459

[求助]如何把程序注册为系统服务

2009-7-20 18:38
7459
如题,如何将程序注册为系统服务

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不会 ,同问
2009-7-20 18:39
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
在SCM(服务管理器)中注册
1.在main中添写一个SERVICE_TABLE_ENTRY 结构,两个成员,一个是服务名,一个是服务函数(ServiceMain)
  使用StartServiceCtrlDispatcher注册上述结构体
2.SCM会在打开服务时调用ServiceMain(),主要是用来调用RegisterServiceCtrlHandler()为服务注册一个控制函数(Handler),功能是与SCM通信进行服务管理。
3.服务功能实现函数由ServiceMain()启动一个专用线程来完成
4.具有以上模块的程序才能注册为服务,使用OpenSCManager()和CreateService()
可以去搜一下己有框架代码。
2009-7-20 20:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢了啦,非常感谢
2009-7-20 23:30
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
冷风有一个服务程序框架,可以参考一下
2009-7-21 07:10
0
雪    币: 179
活跃值: (26)
能力值: ( 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;
}
2009-7-23 09:51
0
雪    币: 61
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
2009-7-23 10:07
0
雪    币: 100
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
delphi里面有专门开发服务程序模板
2009-7-26 13:19
0
游客
登录 | 注册 方可回帖
返回
//