如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
来源:互联网 发布:淘宝新手购物视频教程 编辑:程序博客网 时间:2024/06/04 19: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.
- Creating a Simple Win32 Service in C++ by Thompson Nigel.
- Five Steps to Writing Windows Services in C by Yevgeny Menaker.
- 如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
- 如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
- 使用java service wrapper将java程序注册为windows服务
- 使用java service wrapper将java程序注册为windows服务
- 使用java service wrapper将java程序注册为windows服务
- java Service Wrapper 将jar注册为windows系统服务
- 发布Java程序为Windows服务[Java Service Wrapper]
- Java Service Wrapper配置Java控制台程序为Windows服务
- 发布Java程序为Windows服务[Java Service Wrapper]
- 发布Java程序为Windows服务[Java Service Wrapper]
- 利用JAVA Service Wrapper把JAVA程序做成windows服务
- 发布Java程序为Windows服务[Java Service Wrapper]
- 如何用installutil 注册windows服务
- 【图】使用java service wrapper将java程序注册为window服务
- 使用Java Service Wrapper 把Java程序作为Windows系统服务
- 使用Java Service Wrapper 把Java程序作为Windows系统服务
- 使用Java Service Wrapper 把Java程序作为Windows系统服务
- 使用Java Service Wrapper 把Java程序作为Windows系统服务
- AIX学习笔记(三)
- 雨夜
- 如何使用Java编写NT服务
- 如何通过三维网格自动生成纸制模型
- bugzilla汉化告一段落
- 如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
- 天下无贼经典台词IT版
- 读Chris Crawford 有感.
- VC-定时器应用
- 一个线程同步类
- csdn blog 乱
- ireport0.4.0使用心得
- 华为悄然推出国内首款3G手机 6月批量生产
- 软件开发方法简史(收藏)