service application程序如何自动取得文件名赋给NAME属性(100)

  • 主题发起人 主题发起人 djf813
  • 开始时间 开始时间
D

djf813

Unregistered / Unconfirmed
GUEST, unregistred user!
开发service application时,它的NAME属性是在设计时指定的,如果我编译后注册为服务,那么服务名就是NAME名,我修改了编译后的文件名,注册为服务后还是NAME名,能不能NAME名直接有文件名代替?
 
不能,server的name和exe的name是2回事。你在修改时修改name属性不就可以了。
 
主要是我要把这个服务程序在一台电脑上装2份,我如果改个文件名安装服务没有问题,可是运行和卸载就有问题了,但是VC做的服务就没这个问题,所以我想让服务名自动设置为文件名
 
修改注册服务那个方法,把固定值改一下,取EXE文件名
 
你好轻舞肥羊,如何把WinServerName改为EXE文件名,工程文件如下program sSvr;uses Forms, SysUtils, Windows, SvcMgr, WinSvc, Main in 'Main.pas' {Frm_main};{$R *.res}function Installing: Boolean; //安装后卸载服务begin Result := FindCmdLineSwitch('INSTALL',['-','/','/'], True) or FindCmdLineSwitch('UNINSTALL',['-','/','/'], True);end;function IfStartService: 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([red]WinServerName[/red]), 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; begin if Installing or IfStartService then begin SvcMgr.Application.Initialize; LiveService := TLiveService.CreateNew(SvcMgr.Application,0); SvcMgr.Application.CreateForm(TFrm_main, Frm_main); SvcMgr.Application.Run; end;end.
 
轻舞肥羊,应该怎么设定?
 
修改SvcMgr单元源码procedure TServiceApplication.RegisterServices(Install, Silent: Boolean); procedure InstallService(Service: TService; SvcMgr: Integer);... Svc := CreateService(SvcMgr, PChar(Name), PChar(DisplayName), SERVICE_ALL_ACCESS, GetNTServiceType, GetNTStartType, GetNTErrorSeverity, PChar(Path), PChar(LoadGroup), PTag, PChar(GetNTDependencies), PSSN, PChar(Password));...上面这句就是注册服务时的语句,PChar(Name)改为获取exe文件名就行了
 
后退
顶部