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?

Nathan
quelle

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

Josh Yeager
quelle
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>"
Sachin Kainth
quelle
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

Volodymyr Bilyachat
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
4

Geben Sie hier die Bildbeschreibung ein

Das hat genau bei mir funktioniert!

Ich hoffe jemand kann das nutzen.

kulNinja
quelle
Bild ist kaputt
J.SMTBCJ15
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.

jsw
quelle