Laden...

Windows Dienst kann nicht (mehr) installiert werden

Erstellt von schuppsl vor 2 Jahren Letzter Beitrag vor 2 Jahren 759 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 2 Jahren
Windows Dienst kann nicht (mehr) installiert werden

Hallo zusammen.

Visual Studio 2022
Windows Dienst .NET 4.7.2

Der Dienst läuft seit Jahren problemlos auf dem Produktionsserver.
Nun habe ich diesen mit VS 2022 aktualisiert und einige neue Features eingebaut.
Dieser wird natürlich erst auf dem Testsystem (Windows 10, lokal) installiert.

Leider geht das nicht.
Die Vorgehensweise ist immer diesselbe:

Command Prompt für VS 2022 als Admin starten und mit installutil die exe installieren.
Hat schon 100x funktioniert, auch mit diesem. Leider nicht dieses Mal.

Hier mal die Fehlermeldung:

Fehlermeldung:

Eine transaktive Installation wird ausgeführt.

Die Installationsphase wird gestartet.
Die Protokolldatei enthält den Fortschritt der Assembly c:\MeinPfad\bin\Debug\PollService.exe.
Die Datei befindet sich in c:\MeinPfad\bin\Debug\PollService.InstallLog.

Während der Installationsphase ist eine Ausnahme aufgetreten.
System.InvalidOperationException: Die Installertypen in der Assemblyc:\MeinPfad\bin\Debug\PollService.exe können nicht abgefragt werden.
Die interne Ausnahme System.Reflection.ReflectionTypeLoadException wurde mit folgender Fehlermeldung ausgelöst: Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen..

Die Rollbackphase der Installation wird gestartet.
Die Protokolldatei enthält den Fortschritt der Assembly c:\MeinPfad\bin\Debug\PollService.exe.
Die Datei befindet sich in c:\MeinPfad\bin\Debug\PollService.InstallLog.
Während der Rollbackphase des Installers System.Configuration.Install.AssemblyInstaller ist eine Ausnahme aufgetreten.
System.InvalidOperationException: Die Installertypen in der Assembly c:\MeinPfad\bin\Debug\PollService.exe können nicht abgefragt werden.
Die interne Ausnahme System.Reflection.ReflectionTypeLoadException wurde mit folgender Fehlermeldung ausgelöst: Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen..
Während der Rollbackphase der Installation ist eine Ausnahme aufgetreten. Diese Ausnahme wird ignoriert, und der Rollback wird fortgesetzt. Der ursprüngliche Zustand des Computers wird jedoch möglicherweise nicht vollständig wiederhergestellt, nachdem der Rollback beendet ist.

Die Rollbackphase wurde erfolgreich abgeschlossen.

Die transaktive Installation ist abgeschlossen.

Die Fehlermeldung besagt ja, dass eine Assembly nicht gefunden wurde?
Oder dass die Installationsroutine falsch ist?

Jedenfalls sagt der .NET Dependency Walker, dass alle Referenzen da sind.
Ich kann den Dienst sogar bis zu einem gewissen Graf direkt in VS2022 debuggen ohne Fehlermeldung.
So wird in der Startroutine das Ereignisprotokoll erfolgreich erstellt etc.

Das Ding ist nun, dass ich wissen sollte, welche Assembly fehlt...

In der Fehlermeldung steht auch, ich solle LoaderException-Eigenschaft abrufen.

Die Frage ist nun: Wie und wo kann ich das machen?

Vielen Dank im Voraus!

T
2.219 Beiträge seit 2008
vor 2 Jahren

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 2 Jahren

Danke.
Das kenne ich alles, hilft mir nur nicht weiter.
Ich weiß nicht wo ich das einbauen soll...

Es scheint mir auch, als fände er den Installer nicht - obwohl vorhanden.
Lösche ich die Projectinstaller.cs, erscheint dieselbe Meldung.

16.807 Beiträge seit 2008
vor 2 Jahren

Dann setz Deinen Quellcode auf eine funktionsfähige Version zurück und mach nach und nach Veränderungen.
Wenns dann irgendwann nicht mehr geht, dann weißt, dass die letzte Änderung schuld war.

Etwas migrieren und dann zig Features umsetzen und das nicht zwischendurch zu testen, is halt nich unbedingt sooo die beste Idee.

Die Fehlermeldung besagt ja, dass eine Assembly nicht gefunden wurde?

Ne, steht da ja auch nirgends.
Da steht ja auch: Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen..
Hast das gemacht? Da steht der Grund drin.

Und was auch fischig ist: wieso willst Du eine Debug Assembly deployen?
Meine Vermutung ist: Du hast vergessen ne notwendige Abhängigkeit mit zu deployen.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 2 Jahren

Da steht ja auch: Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen..
Hast das gemacht? Da steht der Grund drin.

Das ist ja der Knackpunkt, wie und wo mache ich das?
Der Rest: Jaaaa, ich weiß 🙂

16.807 Beiträge seit 2008
vor 2 Jahren

Steht doch in den Links drin, nicht gelesen?


         try
         {
            code that causes troubles
         }
         catch (ReflectionTypeLoadException ex)
         {
            Exception[] Exceptions = ex.LoaderExceptions;
            foreach (Exception curEx in Exceptions)
            {
               string curMessage = curEx.Message;
               Type CurType = curEx.GetType();
            }
         }

Ansonsten basiert der Installer ja auf MSI-Install; also aktivier dort das Logging.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 2 Jahren

Wenn ich wüsste, welcher Code den trouble verursacht, wäre das ein leichtes.
Außer der ProjectInstaller Methode habe ich nichts, da ist das bereits eingebaut.
Der Fehler muss also früher passieren.

16.807 Beiträge seit 2008
vor 2 Jahren

Ansonsten basiert der Installer ja auf MSI-Install; also aktivier dort das Logging. https://docs.microsoft.com/de-de/troubleshoot/windows-client/application-management/enable-windows-installer-logging

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 2 Jahren

Jo also, habe den Dienst komplett neu aufgesetzt.
D.h. nicht komplett neu, sondern den Quellcode natürlich kopiert.

Nun geht es.
Wahrscheinlich wurden doch irgendwelche Verweise verschluckt...

Vielen Dank für Eure Hilfe.