我希望能以服务方式使用scktsrvr.exe程序,于是
scktsrvr.exe /install
然后启动,一切OK
如果我不使用本地用户(LocalSystem),而指定为其他用户(甚至Administrator),则启动失败.
另外我发现启动失败好象跟文件系统使用的是NTFS有关,放在另外的FAT分区则可以正常启动.
请指点!
scktsrvr.exe /install
然后启动,一切OK
如果我不使用本地用户(LocalSystem),而指定为其他用户(甚至Administrator),则启动失败.
另外我发现启动失败好象跟文件系统使用的是NTFS有关,放在另外的FAT分区则可以正常启动.
请指点!
>>你在操作系统"服务"里面对你的用服务程序修改下密码和用户就行了,指定用户的时候就已经设置密码了,否则用FAT32分区也启动不了的吧
只是我想让这个服务不以LocalSystem帐户运行,而是使用某个指定帐户(比如Administrator).
这时如果scktsrvr.exe所在的分区是FAT32,一切正常;是NTFS就根本启动不了了
在FAT32分区下,用非Localsystem帐户也是启动不了的
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条件的代码
曾经粗略的看了代码,只注意到了将"LocalSystem"改为"system"的部分,没有再往下看.
chinaloong能讲讲socketserver将帐户限定到LocalSystem帐户的原因吗?
否则的话,将最后一句修改一下,我就可以使用指定帐户了;我想一定是什么特殊原因的.