Gibt es eine Möglichkeit, den .NET Windows-Dienstnamen zu überschreiben, ohne ihn neu zu kompilieren?


72

Ich habe eine ausführbare Windows-Dienstdatei, von der ich weiß, dass sie in .NET geschrieben ist und die ich unter einem anderen Dienstnamen installieren muss, um einen Konflikt zu vermeiden. Die Installation bietet ohnehin keine Möglichkeit, einen Dienstnamen anzugeben. Wenn ich nur Zugriff auf die Binärdatei habe, kann der Dienstname bei der Installation mit installutil trotzdem überschrieben werden?

Antworten:


106

Müssen Sie InstallUtil verwenden? Hier sind die Befehle, um mit sc das zu tun, was Sie wollen:

sc create MyService binPath= "MyService.exe" DisplayName= "MyService"  
sc description MyService "My description"

Referenz: http://support.microsoft.com/kb/251192


1
Das sieht genau so aus, wie ich es will - aber ich kann es nicht zum Laufen bringen. Ich bekomme immer wieder eine "Nutzungs" -Nachricht.
Nathan

34
Mein Problem war , dass es anscheinend muss ein Raum zwischen dem Gleichheitszeichen und dem binPath Wert, zB sc erstellen ahSchedulerService binPath = „MyService.exe“, sc nicht ahSchedulerService binPath = „MyService.exe“ erstellen.
Nathan

Ah, das habe ich vergessen. Entschuldigen Sie, dass Sie ein schlechtes Beispiel gegeben haben.
Josh Yeager

Als ich den SC-Befehl zum Erstellen einer Dienstinstanz verwendete, stellte ich fest, dass ich den gesamten Pfad vor den EXE-Namen setzen musste. Vor dem Ausführen von SC hatte ich mein Eingabeaufforderungsverzeichnis so geändert, dass es mit dem EXE-Verzeichnis identisch war. Ich dachte, das würde ausreichen, war es aber nicht. Beim Versuch, den Dienst zu starten, wurde die Fehlermeldung "System kann die angegebene Datei nicht finden" angezeigt. Der SC-Befehl muss also einen Parameter haben wie: binPath = "C: \ Whatever \ servieName.exe"
John Gilmer

30

Es ist nicht wahr, dass Sie mit InstallUtil den Dienstnamen nicht konfigurieren können. Ich mache es die ganze Zeit so

InstallUtil.exe /servicename="<service name>" "<path to service exe>"

6
Wenn Sie bereits einen Dienst mit demselben Namen wie exe haben, wird ein Fehler ausgegeben System.ComponentModel.Win32Exception: The specified service already exists. Ich habe versucht, zwei Instanzen desselben Dienstes zu installieren und sie unterschiedlich zu benennen. Verwenden Sie sc erstellen Methoden in den folgenden Antworten angegeben
PUG

4
Funktioniert nicht. Gibt einen Fehler aus, dass mein Dienst bereits vorhanden ist.
Jason Kelley

2
Funktioniert, wenn Sie ein Projektinstallationsprogramm haben und die Installation überschreiben und deinstallieren, wie in @Volodymyrs Antwort stackoverflow.com/a/25259719/169714
JP Hellemons

funktioniert nicht mit einem Standard-Installationsprogramm, das aus Visual Studio erstellt wurde
Gelootn

Wenn ich den Parameter "Servicename" in "Name" ändere, funktioniert das für mich.
dbd

25
  1. Fügen Sie Ihrem Service das Projektinstallationsprogramm hinzu
  2. Fügen Sie eine Methode hinzu, um den CustomService-Namen abzurufen

    private void RetrieveServiceName() 
    {
        var serviceName = Context.Parameters["servicename"];
        if (!string.IsNullOrEmpty(serviceName))
        {
            this.SomeService.ServiceName = serviceName;
            this.SomeService.DisplayName = serviceName;
        }
    }
    
  3. Rufen Sie bei der Installation und Deinstallation auf

    public override void Install(System.Collections.IDictionary stateSaver)
    {
       RetrieveServiceName();
      base.Install(stateSaver);
    }
    
    
    public override void Uninstall(System.Collections.IDictionary savedState)
    
    {
       RetrieveServiceName();
       base.Uninstall(savedState);
    }
    
  4. installutil /servicename=”My Service [SysTest]” d:\pathToMyService\Service.exe

Quelle


Dies war sehr nützlich. Ich musste meine ausführbare Dienstdatei neu kompilieren, damit sie funktioniert, sobald ich diesen Code hinzugefügt habe. Das war für mich kein Problem.
Terry Kernan


2

Versuchen Sie, Ihren Dienst mit sc.exe zu installieren. Eine schnelle Suche ergibt viele Unterlagen. Mit diesem Tool ist es einfach, vorhandene Dienste zu ändern und / oder neue hinzuzufügen - einschließlich Namen.

Bearbeiten: Ich installiere meine .NET-Dienste mit diesem Tool.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.