比如我做了一个NT服务 a.exe ,按照一般的办法,都是要在cmd 下敲下代码:a.exe -install 然后再 a.exe -start ,服务才行安装和执行,能不能实现,我执行双击这个a.exe文件,他自己就能执行和安装的?

解决方案 »

  1.   

    可以的~  虽然我也是用delphi为主的.... 做服务还是用的vc...
    服务的入口是 WinServiceMain()
    而程序的入口是 main()
    只要在main()中   
            
            SC_HANDLE schSCManager;
    SC_HANDLE schService;
    LPCTSTR lpszDisplayName; 
    LPCTSTR lpszBinaryPathName; schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_CREATE_SERVICE); 
     
    if (schSCManager == NULL) 
    printf("ERROR on OpenSCManager"); lpszDisplayName = TEXT(descriptiveName);
    lpszBinaryPathName = path;
     
    schService = CreateService(.......)...  既然-install已经能安装了  把判断传入参数的那个if去掉, 那服务不是就自动添加了么.if Installing or StartService then
      begin
        SvcMgr.Application.Initialize;
        SocketService := TSocketService.CreateNew(SvcMgr.Application, 0);
        SvcMgr.Application.CreateForm(TSocketForm, SocketForm);
        SvcMgr.Application.Run;
      end else
      begin
        
        Forms.Application.ShowMainForm := False;
        Forms.Application.Initialize;
        Forms.Application.CreateForm(TSocketForm, SocketForm);
        SocketForm.Initialize(False);
        Forms.Application.Run;
      end;以上一段来自其他帖子,你可以把服务的安装代码写在后面的else代码当中(不能用SvcMgr当中自带的注册,否则会搜索命令行开关)。 
    SvcMgr.dpr位于Source\Win32\db目录