function TTransparentForm.InstallService(ServiceName, DisplayName, FileName: string): boolean;
var
  SCManager , Service : THandle  ;
  Args  : pchar;
  TempServiceStatus      : TServiceStatus;
begin
  Result := False;
  SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if SCManager = 0 then  Exit;
      try
          Service := CreateService(
                SCManager,                  
                PChar(ServiceName),         
                PChar(DisplayName),        
                SERVICE_ALL_ACCESS,    
                SERVICE_WIN32_OWN_PROCESS, 
                SERVICE_AUTO_START,      
                SERVICE_ERROR_IGNORE,      
                PChar(FileName),        
                nil,  nil,  nil,   nil,   nil                       
                                  );        Args := nil;
        //sleep(1000);
        Service := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
        if  Service <> 0 then
        begin
        StartService(Service, 0, Args);
        CloseServiceHandle(Service);
        end ;
      finally
      CloseServiceHandle(SCManager);
      end;
      Result := True;
在启动时要报1053错误!但是我用delphi自代的代码就没有问题!

解决方案 »

  1.   

    安装和启动服务都没有问题,代码我测试过的,出现1053的错误是“服务并未及时响应启动或控制请求。 ” 应该从服务本身找原因。你可以用其它的服务测试看看,或者在windows的服务管理里面启动看看。
      

  2.   

    也不知道为什么可以启动了,现在又看不见主窗体了!
    我在主窗体中加入了RzTrayIcon这个控件的,听说这样子服务启动时才看的见主窗体!
    现在却看不见不知道是为什么!!!
      

  3.   

    要看到主窗体必须将服务设成允许与桌面交互的类型,另外,在服务中使用TrayIcon时要注意,服务的启动时间可能比你登录windows桌面的时间要早,这种情况下你的服务会出错,建议在服务中检测托盘是否可用,然后再决定要不要显示托盘图标。
      

  4.   

    begin
            StartService(Service, 0, Args);
            CloseServiceHandle(Service);
    end ;
    还是启动不了!
    在  StartService(Service, 0, Args); 这一句停好久就是启动不了!
      

  5.   

    在TService里会有
    Interective:=true;
    不过楼主既然不这么做