如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)

转载 2004年12月30日 15:37:00

如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)

前提:
         从http://wrapper.tanukisoftware.org 下载 Java Service Wrapper 的源代码.

    因为 Java Service Wrapper 同时提供windows 和 linux 上的实现,所以源文件夹里的代码都是分两份的.
    在windows下的实现注册 windows 服务的代码在wrapper_win.c 文件中.
    看了其中的代码后你会对作者的专业精神有深刻的体会,在wrapper_win.c文件中的历史变动说明就有300多行,详细描述了每次改动的变化.具体实现的方法中也都有详细的说明,所以看这样的代码基本上不费力气的.

    如果非要说看代码是享受,  Java Service Wrapper  的源代码算一个.

   下面我们看看它是如何实现注册一个exe文件为windows服务的.

    wrapper_win.c中的入口main 函数定义如下:

    void _CRTAPI1 main(int argc, char **argv)      //注意main定义的修饰_CRTAPI1

    根据argv的输入参数分别执行,注册,取消,开始,停止windows服务的操作:
    代码如下:
   if(!_stricmp(argv[1],"-i") || !_stricmp(argv[1],"/i")) {
          result = wrapperInstall(argc, argv);                              //注册服务
   } else if(!_stricmp(argv[1],"-r") || !_stricmp(argv[1],"/r")) {
          result = wrapperRemove();                                         //取消注册
   } else if(!_stricmp(argv[1],"-t") || !_stricmp(argv[1],"/t")) {
          result = wrapperStartService();                                   //启动服务
   } else if(!_stricmp(argv[1],"-p") || !_stricmp(argv[1],"/p")) {
           result = wrapperStopService(TRUE);                         //停止服务
   }

我们重点看windows服务注册的实现,即wrapperInstall(argc, argv) 方法.
    第一步: 使用OpenSCManager winapi 获得一个服务控制管理器的句柄.
    第二步: 使用CreateService winapi 创建服务,参数很多,重要的有: 服务名 ,服务类型,可执行文件路径
    第三步: 在注册表中添加注册信息: 代码如下:
            sprintf(regPath, "SYSTEM//CurrentControlSet//Services//%s", wrapperData->ntServiceName);
            //ntServiceName就是在服务管理器中看到的服务名
            if ((wrapperData->ntServiceDescription != NULL && strlen(wrapperData->ntServiceDescription) > 0)
                && (RegOpenKeyEx(HKEY_LOCAL_MACHINE, regPath, 0, KEY_WRITE, (PHKEY) &hKey) == ERROR_SUCCESS)) {
                RegSetValueEx(hKey, "Description", (DWORD) 0, (DWORD) REG_SZ,
                    (const unsigned char *)wrapperData->ntServiceDescription,
                    (strlen(wrapperData->ntServiceDescription) + 1));
                RegCloseKey(hKey);
            }
           
   原以为很复杂的过程,实际上很简单,对不对?

There are two excellent articles that explain how a simple service application can be created.

使用java service wrapper将项目部署到linux服务器上

最近有需求是将java项目部署到linux服务器上作为服务端程序,最后经过测试成功。本着分享精神将总结出来的路子分享给大家,如果不明白的地方可以在下边留言,谢谢。 将java项目部署到linux服务...
  • ctf521love
  • ctf521love
  • 2015年03月09日 11:25
  • 2300

C++编写Windows服务

使用C++ 编写Windows 服务,我所看的文章如下(红色的"=" 以内, 来自http://www.programfan.com/article/2920.html ): ===========...
  • nodeathphoenix
  • nodeathphoenix
  • 2014年04月20日 14:03
  • 10304

详解Maven项目利用java service wrapper将Java程序生成Windows服务

在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了。 本博文将通过有两种方法实现该功能,手动创建法和Maven自动打...
  • a123demi
  • a123demi
  • 2015年01月23日 18:00
  • 3697

java Service Wrapper 将jar注册为windows系统服务

java Service Wrapper项目用于将jar包注册为系统服务,支持windows及linux等系统。 项目下载地址:http://wrapper.tanukisoftware.com/do...
  • wangchao729251283
  • wangchao729251283
  • 2016年11月15日 22:40
  • 1148

【图】使用java service wrapper将java程序注册为window服务

公司项目中有个需求是内网与公网信息交互,内网要时时接受公网消息进行打印,这部分程序是要部署在客户端的PC机上的,开发的时候,怎么玩都可以,部署到用户电脑上的时候肯定不能让用户电脑打开一个黑窗口吧。 所...
  • liuyifeng1920
  • liuyifeng1920
  • 2016年04月21日 10:32
  • 856

Java Service Wrapper工具把Java程序转换为Windows服务小结(新版3.5.17)

大致步骤相同,在文件配置及需要的文件有所不同. 下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp 步骤: 1.建立目...
  • techbirds_bao
  • techbirds_bao
  • 2013年04月14日 12:22
  • 1870

发布Java程序为Windows服务[Java Service Wrapper]

☆下载Windows版本:http://nchc.dl.sourceforge.net/sourceforge/wrapper/wrapper-windows-x86-32-3.2.3.zip  ...
  • yangtang_newton
  • yangtang_newton
  • 2012年02月28日 09:04
  • 419

使用Java Service Wrapper 把Java程序作为Windows系统服务

Java程序很多情况下是作为服务程序运行的,在Un*x平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你的Cons...
  • yefengmeander
  • yefengmeander
  • 2011年07月03日 12:22
  • 474

Java Service Wrapper工具把Java程序转换为Windows服务总结

首先下载java service wrapper工具 http://sourceforge.net/project/showfiles.php?group_id=39428 步骤: 1、解压...
  • w541826816
  • w541826816
  • 2014年05月15日 15:26
  • 543

Java Service Wrapper工具把Java程序转换为Windows服务

之前曾使用Wrapper 将java的serve人转换为windows服务,后来在自己的win7上配置,出现了些问题,记录下。 大部分的操作网上都有,我这里做个摘录。 下载Wrapper htt...
  • sun_boyhappy
  • sun_boyhappy
  • 2011年09月14日 18:23
  • 1218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
举报原因:
原因补充:

(最多只允许输入30个字)