我希望能以服务方式使用scktsrvr.exe程序,于是
scktsrvr.exe /install
然后启动,一切OK
如果我不使用本地用户(LocalSystem),而指定为其他用户(甚至Administrator),则启动失败.
另外我发现启动失败好象跟文件系统使用的是NTFS有关,放在另外的FAT分区则可以正常启动.
请指点!

解决方案 »

  1.   

    >>回复人:yi10000() ( 二级(初级)) 信誉:100
    >>你在操作系统"服务"里面对你的用服务程序修改下密码和用户就行了,指定用户的时候就已经设置密码了,否则用FAT32分区也启动不了的吧
      

  2.   

    >>回复人:LoveCJ(周杰伦就是一sb) ( 一级(初级)) 信誉:100  2006-12-8 17:25:27    得分:0 >>一般在Administrator下install就OK我本来就是在Administrator里scktsrvr.exe /install的.
    只是我想让这个服务不以LocalSystem帐户运行,而是使用某个指定帐户(比如Administrator).
    这时如果scktsrvr.exe所在的分区是FAT32,一切正常;是NTFS就根本启动不了了
      

  3.   

    又实验了一下,看来是我弄错了一点
    在FAT32分区下,用非Localsystem帐户也是启动不了的
      

  4.   

    function StartService: Boolean;
    var
      Mgr, Svc: Integer;
      UserName, ServiceStartName: string;
      Config: Pointer;
      Size: DWord;
    begin
      Result := False;
      Mgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if Mgr <> 0 then
      begin
        Svc := OpenService(Mgr, PChar(SServiceName), SERVICE_ALL_ACCESS);
        Result := Svc <> 0;
        if Result then
        begin
          QueryServiceConfig(Svc, nil, 0, Size);
          Config := AllocMem(Size);
          try
            QueryServiceConfig(Svc, Config, Size, Size);
            ServiceStartName := PQueryServiceConfig(Config)^.lpServiceStartName;
            if CompareText(ServiceStartName, 'LocalSystem') = 0 then
              ServiceStartName := 'SYSTEM';
          finally
            Dispose(Config);
          end;
          CloseServiceHandle(Svc);
        end;
        CloseServiceHandle(Mgr);
      end;
      if Result then
      begin
        Size := 256;
        SetLength(UserName, Size);
        GetUserName(PChar(UserName), Size);
        SetLength(UserName, StrLen(PChar(UserName)));
        Result := CompareText(UserName, ServiceStartName) = 0;
      end;
    end;这个是scktsrvr判断install条件的代码
      

  5.   

    谢谢chinaloong!
    曾经粗略的看了代码,只注意到了将"LocalSystem"改为"system"的部分,没有再往下看.
    chinaloong能讲讲socketserver将帐户限定到LocalSystem帐户的原因吗?
    否则的话,将最后一句修改一下,我就可以使用指定帐户了;我想一定是什么特殊原因的.