CCProxy有一个选项,可以自动成为NT的服务,
他会变为一个Tray,可以激活设置,
可我的作的服务窗口怎么也出不来!

解决方案 »

  1.   

    服务程序本身就可以带上窗口。Delphi提供了向导创建服务程序。简单的理解,服务程序有三个要点:
    1、工程文件中的全局变量Application应该是SvcMgr定义而不是Forms定义。
    2、服务程序有一个TService(从TDataModule派生),所以你可以将TService看作一个TDataModule。
    3、如果工程文件的Application(如Application.Run.Initialize;Application.Run;)引用自SvcMgr单元,那么就是一个服务程序,如果引用自Form3单元,那么就是一个普通程序。
        因此可以在界面中设置一个选项(可以通过程序启动参数方式传入)指定Application从哪个单元引用,从而就可以让程序以服务还是非服务方式启动。    至于其他细节问题,如Tray、服务注册/注销等,还需要自己写不少的代码或者使用现成的组件和函数库来完成。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    看看: Source\VCL\ScktSrvr.dpr文件,看它怎么做的。另:注册/注销服务,不要使用API(CreateService之类)
    直接调用:
      WinExec(PChar(ParamStr(0) + ' -install -slient'),...)
      WinExec(PChar(ParamStr(0) + ' -uninstall -slient'),...)
      

  3.   

    参数打错,是:
    WinExec(PChar(ParamStr(0) + ' -install -Silent'),...)Silent即说,完成后,不显示出:
      注册服务成功的P话。
      

  4.   

    copy_paste(木石三) :
    以前用过ScktSrvr.exe,却不知道Delphi带了源码,真的太好了。呵呵,多谢,这的确是一个非常好的例子。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  5.   

    不过直接用WinExec还是有问题的,例如已经注册,再WinExec(Install)就异常了,已经注销再注销也是一样,所以还是需要用API事先检查一下:》————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  6.   

    呵呵,检查就得自己写了,就得用API,我倒忘了。
      

  7.   

    function IsInstallService(const ServiceName: string): Boolean;
    var
      Svc, SvcMgr: Integer;
    begin
      SvcMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if SvcMgr = 0 then RaiseLastOSError;
      try
        Svc := OpenService(SvcMgr, PChar(ServiceName), SERVICE_ALL_ACCESS);
        Result := Svc <> 0;
        if Result then
          CloseServiceHandle(Svc);
      finally
        CloseServiceHandle(SvcMgr);
      end;
    end;
      

  8.   

    uses WinSvc;scktsrvr.dpr里面有很多经典的代码,学Delphi必看,哈。