作者:liguisen
blog:http://blog.youkuaiyun.com/liguisen/
Windows CE .NET中的服务是一种流接口驱动程序,并不是真正的设备驱动程序,它以动态链接库DLL的形式出现,并被Services.exe加载运行。我们知道,在2000/NT中服务是以exe形式存在的,在CE中采用DLL的形式,很大一个原因是CE受到32进程数的限制。Services.exe在Windows CE .NET启动时自动启动并枚举注册表HKEY_LOCAL_MACHINE/Services的每个子项(这里每个子项对应一个服务)以便加载服务。
1,首先使用evc4创建一个新的 WCE 动态链接库项目MyService,然后添加导出函数定义:
DWORD TEST_Init(DWORD dwData)
{
//初始化函数,可以在这里做其它事情
return 1;
}
DWORD TEST_Open( DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{ return 0; }
DWORD TEST_Read( DWORD dwData, LPVOID pBuf, DWORD dwLen)
{ return 0; }
……
将这些函数名称添加到项目 .def 文件导出表中:
EXPORTS
; Explicit exports can go here
TEST_Init
TEST_Open
TEST_Read
……
编译生成MyService.dll。
2,利用evc4的Remote Registry Editor向注册表 HKEY_LOCAL_MACHINE/Services/Service 项添加一个子项MyService,并指定相关键值。
[HKEY_LOCAL_MACHINE/Services/MyService]
"Dll"="MyService.dll"
"Order"=dword:8
"Keep"=dword:1
"Prefix"="TEST"
"Index"=dword:0
"Context"=dword:0
"DisplayName"="DisplayName_Test"
"Description"="Description_Test "
这些值的意义可以查看MSDN。
3,用Remote File Viewer把MyService.dll复制到模拟器windows文件夹。重新启动Windows CE .NET即可启动服务。
利用Remote Process Viewer可以查看Services.exe是否已经加载了MyService.dll,若已经加载,表示服务已经开始。当然,也可以在服务中显示一个提示框,直观的显示服务正在运行。