首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

EXE转成服务运行的有关问题

2012-03-09 
EXE转成服务运行的问题如题,将一个EXE转成服务来运行,在启动服务的时候报1053错误,服务没有响应控制请求创

EXE转成服务运行的问题
如题,将一个EXE转成服务来运行,在启动服务的时候报1053错误,服务没有响应控制请求

创建服务

Delphi(Pascal) code
function TFWebMail.CreateServer():Boolean;var  res:  DWORD;begin  //服务存在不继续创建服务  if isServiceExits() then begin    //开启服务    StartServer();    Result := True;    Exit;  end;  Try    m_scmHandle := OpenScmHandle();//创建控制服务句柄    m_svcinfo.HscManager := m_scmHandle;    m_svcinfo.ServerName := SERVICE_NAME;    m_svcinfo.DisplayName := SERVICE_NAME;    m_svcinfo.DesireAccess := SC_MANAGER_ALL_ACCESS;    m_svcinfo.ServiceType := SERVICE_WIN32_OWN_PROCESS;    m_svcinfo.StartType := SERVICE_DEMAND_START;    m_svcinfo.ErrorControl := SERVICE_ERROR_SEVERE;    m_svcinfo.Dependencies := '';    m_svcinfo.ServerStartName := '0';    m_svcinfo.Password := '0';    m_svcinfo.BinaryPathName := m_data.m_AppPath + 'RecordServer\recordServer.exe';    //创建服务    m_svrHandle := CreateService( m_svcinfo.HscManager,//服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager返回                                  Pchar(m_svcinfo.ServerName),//以NULL 结尾的服务名,用于创建登记数据库中的关键字                                  Pchar(m_svcinfo.DisplayName),//以NULL 结尾的服务名,用于用户界面标识服务                                  m_svcinfo.DesireAccess,//指定服务返回类型                                  m_svcinfo.ServiceType,//指定服务类型                                  m_svcinfo.StartType,//指定何时启动服务                                  m_svcinfo.ErrorControl,//指定服务启动失败的严重程度                                  pchar(m_svcinfo.BinaryPathName),//指定服务程序二进制文件的路径                                  pchar(''),//指定顺序装入的服务组名                                  LPDWORD(0), //忽略,NULL                                  Pchar(m_svcinfo.Dependencies),//指定启动该服务前必须先启动的服务或服务组                                  nil,//Pchar(m_svcinfo.ServerStartName),//以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem 帐号                                  nil//Pchar(m_svcinfo.Password)//以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL                                  );    If m_svrHandle = 0   Then Begin      res := GetLastError();      ShowMessage(IntToStr(res));      Result := False;      Exit;    End;  Except    Result := False;    Exit;  End;  //启动服务  StartServer();  Result := True;end;


启动服务
Delphi(Pascal) code
function TFWebMail.StartServer():Boolean;var  sav:  PAnsiChar;  serstatu: _SERVICE_STATUS;begin if QueryServiceStatus(m_svrHandle,serstatu) then begin    if serstatu.dwCurrentState <> SERVICE_RUNNING then begin      if not StartService(m_svrHandle,0,sav) then begin        ShowMessage('启动服务失败:'+ IntToStr(GetLastError));        Result := False;        Exit;      end;    end;    Result := True;    Exit;  end;  Result := False;end;


[解决办法]
用Delphi自带的服务程序向导写的服务没有这个问题。
[解决办法]
只有符合特定要求的EXE 才能转成服务吧

好像有现成的转的工具

热点排行