Verwenden von InstallUtil zum Deinstallieren des Diensts, der nicht existiert

8

Ich verwende Pre- und Postbuild-Ereignisse meines Dienstes, um den Dienst zu deinstallieren und zu installieren. Das einzige Problem ist, dass das erste Mal, wenn ein anderer Entwickler das Pre-Build-Ereignis verwendet, fehlschlägt, da der Dienst noch nicht installiert ist.

Mein aktuelles Prebuild-Event, das deinstalliert, ist

%Vor%

Wie kann ich dies verwenden, um NUR zu deinstallieren, wenn der Service bereits installiert ist?

    
g.foley 26.10.2010, 00:10
quelle

3 Antworten

14

Sie können das Microsoft SC-Tool (Sc.exe) verwenden, um den Status eines Service abzufragen oder sogar einen Service zu erstellen oder zu löschen. Hier ist ein Artikel über die Verwendung dieses Befehls: Ссылка

Über ein Eingabeaufforderungsfenster (Inhalt, der zur Hervorhebung bearbeitet wurde):

%Vor%

Wenn Sie diesen Befehl ausführen, um einen Service abzufragen, der (A) existiert und (B) nicht existiert, ergibt dies:

(A)

%Vor%

(B)

%Vor%

Sie könnten also die Existenz eines Dienstes testen, bevor Sie versuchen, ihn mit dem folgenden zu löschen - (entschuldigen Sie die abstoßende Verwendung der FOR-Anweisung, ich bin mir nicht sicher, wie ich die Ausgabe des sc-Befehls erfassen soll eine Variable oder verwende sie in einer IF-Anweisung) -

%Vor%     
dh0well 26.10.2010, 01:10
quelle
0

Ich verwende Visual Studio 2008, um einen Dienst zu erstellen, und wie Sie möchte ich, dass der Dienst für mich neu installiert wird, wenn ich ihn neu erstellen muss.

Mein Prebuild ist

%Vor%

Mein Post Build ist

%Vor%

Der "Exit / b 0" bedeutet, dass selbst wenn der Dienst nicht installiert ist, er nicht fehlschlägt. Wenn Sie den Dienst noch nicht erstellt haben, funktioniert er weiterhin. Nach dem ersten Mal werden beide Befehle offensichtlich erfolgreich sein.

Damit dies funktioniert, MÜSSEN Sie VISUAL STUDIO mit erhöhten Berechtigungen ausführen.

Hoffe, das hilft.

    
Jim Grimmett 21.12.2011 16:20
quelle
0

Um auf der Lösung von Jim Grimmett aufzubauen und sie mit .net 4.0 zu verwenden, wird der Pre-Build:

net stop yourServiceName

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil / u "$ (TargetPath)"

Beenden / b 0

und für den Post Build:

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil / i "$ (Zielpfad)"

net starten yourServiceName

rem Beenden / b 0

Leider hat sich das $ (FrameworkDir) nicht in den .net 4.0 Pfad erweitert

    
dmihailescu 05.02.2013 17:01
quelle