AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Gleichen Dienst mehrfach installieren -> Name?
Thema durchsuchen
Ansicht
Themen-Optionen

Gleichen Dienst mehrfach installieren -> Name?

Ein Thema von Captnemo · begonnen am 17. Apr 2015 · letzter Beitrag vom 17. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 09:30
Hi,

ich will einen Dienst mehrfach auf dem gleichen Rechner installieren.
Nun gibt es je TService.Displayname und TService.Name, die ich während der Entwicklung festlege, und die ja bei der Installation als Anzeigename und Dienstname einträgt, was natürlich schlecht ist.

Jetzt könnte man ja die Installation mit einem zusätzlichen Parameter aufrufen, der dann den Dienstnamen und den Anzeigename für den jeweiligen Dienst anpasst.

Muss aber dann der Dienst diese Informationen (Dienstname und Anzeigename) beim Starten auch jedes mal haben, damit er gestartet werden kann? Ich nehme mal an ja. Dann müsste man ja nach der Installation in die Dienste gehen und den Aufruf manuell anpassen, oder trägt er das selber gleich mit ein?

Und welchen Einfluss hat das Ändern von TService.Name auf den Ablauf des Services?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 09:38
Der Dienst selber braucht den Namen nicht zum Starten, der ServiceController benötigt den schon, sonst weiß er nicht, welchen er starten soll
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
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 09:47
ja, aber ist es wichtig den Namen später nach der Installation auch jedes Mal auf den gleichen zu setzen den man während der Installation verwendet hat, oder ist das dann egal?

[Edit] hab grad deine Antwort nochmal gelesen.
Also muss ich das so verstehen, dass er den gleichen Namen doch jedesmal benötigt. Aber wie macht man das am geschicktesten? Über einen Startparameter?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo (17. Apr 2015 um 09:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 09:55
Lösungen, denn Delphi-Services sind da echt besch* implementiert: (vieles ist hartgecodet und lässt sich nicht anpassen)
  • Entweder mehrere Verzeichnisse und eine INI im Programmverzeichnis, über welche der nötige Service.Name und Service.DisplayName (Name + '_Display') ermittelt wird.
  • Oder über StartParameter (bei Installieren einen Namen angeben), zuweisen und nach dem Installieren durch den Service (OnAfterInstall) den ImagePath um den Parameter erweitern, da man sonst scheinbar nitgendwo rausbekommen kann, über welchen Registryeintrag man gestartet wurde und mit welchem Namen man dann weiter machen soll.

Alternative Lösung:
Die Service-Implementation von Fremdanbietern (gibt es bestimmt irgendwo etwas ... man kann es ja fast nur noch besser machen)
$2B or not $2B

Geändert von himitsu (17. Apr 2015 um 10:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 10:06
  • Entweder mehrere Verzeichnisse und eine INI im Programmverzeichnis, über welche der nötige Service.Name und Service.DisplayName (Name + '_Display') ermittelt wird.
  • Oder über StartParameter (bei Installieren einen Namen angeben), zuweisen und nach dem Installieren durch den Service (OnAfterInstall) den ImagePath um den Parameter erweitern, da man sonst scheinbar nitgendwo rausbekommen kann, über welchen Registryeintrag man gestartet wurde und mit welchem Namen man dann weiter machen soll.
Den ersten Vorschlag hatte ich auch schon im Hinterkopf.
Die zweite Lösung gefällt mir aber noch besser, da ich dann nicht abhängig von irgendwelchen Inidateien bin.

Eigentlich schade, dass das so unglücklich gelöst ist, aber solange es einen Workaround gibt. Sind ja nur ein paar Zeilen Code.

Noch eine andere Frage: Gibt es eigentlich irgendeine Beschränkung bezüglich der Länge der Parameter? Ich würde nämlich gerne eine GUID verwenden.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
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, 10: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
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#7

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 11:12
Es wurde noch nicht gesagt, daher eine Ergänzung von mir: Wichtig ist, dass der Dienstname eindeutig ist, denn anhand desselben arbeitet der Service Control Manager (SCM). Der Display Name kann identisch sein, weil dieser nur der Anzeige dient.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 11:13
Der Display Name kann identisch sein, weil dieser nur der Anzeige dient.
Leider nein, auch der muss eindeutig sein, sonst gibt es eine Fehlermeldung
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
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#9

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 11:32
Der Display Name kann identisch sein, weil dieser nur der Anzeige dient.
Leider nein, auch der muss eindeutig sein, sonst gibt es eine Fehlermeldung
Hoppla. Ich sollte öfter testen, bevor ich etwas schreibe (noch dazu, weil ich mich seit Monaten mit Diensten beschäftige). Ich ging tatsächlich davon aus, dass das geht. Stattdessen kommt die Meldung vom System
Zitat:
System Error. Code: 1078.

Der Name wird bereits als Dienstname oder als Dienstanzeigename verwendet.

Irgendwie sinnfrei, sowohl Service Name als auch Display Name als Identifikationsmerkmal zu benutzen. Naja, MS wird seine Gründe haben, auch wenn diese nicht ersichtlich sind. Vorteil davon ist aber, dass man bei net start/stop auf einer CMD auch den Display Name benutzen kann, ohne den Dienstnamen kennen zu müssen (der zumindest mir oft nicht einfällt).

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Gleichen Dienst mehrfach installieren -> Name?

  Alt 17. Apr 2015, 11:36
Die Hilfe von net start ... meint, daß man ihm den Dienstnamen geben soll, aber wenn man sich die vorgeschlagenen Namen ansieht, dann erkennt man, daß der den Displaynamen meint.
Wenn ich es richtig in Erinnerung hab, dann nimmt der Beides an und demnach erklärt sich auch, warum beide Namen (Name und DisplayName) jeweils eindeutig sein müssen.
$2B or not $2B

Geändert von himitsu (17. Apr 2015 um 11:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz