Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Windows Dienst kann nicht (mehr) installiert werden
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

Windows Dienst kann nicht (mehr) installiert werden

beantworten | zitieren | melden

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:

Fehler

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!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von schuppsl am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1.907
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Direkte Suche nach LoaderExceptions liefert bei Google pasende Treffer.

Bsp:
https://social.msdn.microsoft.com/Forums/de-DE/beb88a42-6b2d-4d69-9aae-9a0a09fb4189/howto-retrieve-the-loaderexceptions-property-for-more-information-?forum=vcgeneral
how-to-retrieve-the-loaderexception-property

T-Virus
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.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.490

beantworten | zitieren | melden

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.
Zitat
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.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt

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ß
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.490

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.490

beantworten | zitieren | melden

Zitat von Abt
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
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers