Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 09:09
Hier mal einen Service, den du mit mehreren Namen installieren kannst
Delphi-Quellcode:
unit Service.Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs;

type
  TServiceName = class( TService )
    procedure ServiceCreate( Sender: TObject );
    procedure ServiceAfterInstall( Sender: TService );
  private
    FName: string;
  public
    function GetServiceController: TServiceController; override;
    {Public-Deklarationen}
  end;

var
  ServiceName: TServiceName;

implementation

{$R *.dfm}

uses
  System.Win.Registry;

procedure ServiceController( CtrlCode: DWord ); stdcall;
begin
  ServiceName.Controller( CtrlCode );
end;

function TServiceName.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TServiceName.ServiceAfterInstall( Sender: TService );
var
  reg: TRegistry;
begin
  if FName <> 'then
    begin
      reg := TRegistry.Create;
      try
        reg.RootKey := HKEY_LOCAL_MACHINE;
        if reg.OpenKey( 'SYSTEM\CurrentControlSet\Services\' + Self.Name, True ) then
          begin
            reg.WriteExpandString( 'ImagePath', ParamStr( 0 ) + ' -name ' + FName );
            reg.CloseKey;
          end;
      finally
        reg.Free;
      end;
    end;
end;

procedure TServiceName.ServiceCreate( Sender: TObject );
begin
  if FindCmdLineSwitch( 'name', FName ) and (FName <> '') then
    begin
      Self.DisplayName := Self.DisplayName + '(' + FName + ')';
      Self.Name := Self.Name + '_' + FName;
    end;
end;

end.
Installieren mit
Code:
myservice.exe -install [-name <service-name-addon>]
und deinstallieren eben analog mit
Code:
myservice.exe -uninstall [-name <service-name-addon>]
PS Das Verwenden von MagicValues möge man mir hier nachsehen und bitte selber korrigieren
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat