当前位置: 代码迷 >> Windows Mobile >> WinCE 下的服务程序无法用 RegisterService()函数注册,也无法用 ActivateService() 函数来启动解决办法
  详细解决方案

WinCE 下的服务程序无法用 RegisterService()函数注册,也无法用 ActivateService() 函数来启动解决办法

热度:26   发布时间:2016-04-25 07:46:39.0
WinCE 下的服务程序无法用 RegisterService()函数注册,也无法用 ActivateService() 函数来启动
我按照微软的文档说明上写了一个非常简单的服务程序:

extern "C" DWORD PASCAL EXPORT XHW_Init(DWORD dwData)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 DWORD dwThreadID = 0;
 CreateThread ( NULL, 0, ProcThread, NULL, 0, &dwThreadID );
 dwData = 1;

 return 1;
}

其他导出函数都按照微软的例子没有做任何修改,但是我用 RegisterService() 注册服务时返回 代码5“访问被拒绝”的错误,我又按照文档说明在注册表中加入了服务注册项如下:
REGEDIT4

[HKEY_LOCAL_MACHINE\Services\XHWSVR]
"Order"=dword:00000008
"Dll"="XhwSvr.dll"
"Prefix"="XHW "
"DisplayName"="XHW Service"
"Description"="XieHongWei's Service"
"IsEnabled"=dword:00000001
"Keep"=dword:00000001
"Index"=dword:00000000

我将 SmartPhone 系统重启后用 ActivateService() 函数激活服务却返回错误代码2(文件找不到),代码如下:

HANDLE hd = ActivateService(L"BTAGSVC", 0) ;
  if ( hd != NULL )
  {
  AfxMessageBox ( L" 成功启动服务" );
  }
  else
  {
  TCHAR szBuf[80]; 
  wsprintf(szBuf, L"Failed with error %d", GetLastError() );
  AfxMessageBox(szBuf);
  return FALSE;
  }


我已经将“XhwSvr.dll”文件拷贝到 “\Windows”目录下了,实在没办法,我将“XhwSvr.dll”文件拷贝到系统根目录下,但是问题依旧,请高手指点。



------解决方案--------------------
你注册表的配置的路径错误了:
"Dll"="\Windows\XhwSvr.dll"
------解决方案--------------------
Wince下的service的概念和desktop上的不一样。
先看看msdn上关于wince service的文档吧。

------解决方案--------------------
应该这个和语言的版本没有关系的,呵呵,我在英文版本试过的是没有问题的
------解决方案--------------------
请确认dll文件是不是加了数字签名!另外注册表应该还有一项:DWORD content = 0
  相关解决方案