wake-up-neo.com

Warum kann ich meinen Dienst nicht installieren (Laufzeit neuer als geladene Laufzeit)?

Also habe ich einen Dienst in C # erstellt und versuche, den folgenden Befehl zur Installation zu verwenden:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe MyService.exe >> installLog.txt

Es schlägt fehl. Wenn ich mir die installLog.txt anschaue, bekomme ich folgendes:

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation.  All rights reserved.

Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or Assembly 'file:///C:\MyService.exe' or one of its dependencies. This Assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded..

Der gleiche Ansatz funktioniert gut, wenn Sie eine andere Assembly installieren. Ich habe das Gefühl, es könnte sein, dass die fehlgeschlagene Version für .NET 4.0 geschrieben wurde und die funktionierende Version 3.5 ist.

Hat jemand Erfahrung mit diesem Problem?

24
SuperNES

Niemand kam nahe daran heran!

Folgendes musste ich tun:

  1. Klicken Sie mit der rechten Maustaste auf das Dienstprojekt in Visual Studio, und klicken Sie auf "Eigenschaften".
  2. Setzen Sie "Startobjekt" auf den Namen des Dienstes (es wurde auf den Wert "(Not Set)" gesetzt).
  3. Sparen.
  4. Bauen
  5. Versuchen Sie erneut zu installieren.
  6. Es klappt! Yay! Wir können alle nach Hause gehen!

Link zum code Projektartikel der geholfen hat:

25
SuperNES

Sie verwenden die falsche installutil.exe, wenn Ihre Anwendung für .NET 4.0 erstellt wurde. Verwenden Sie die Datei installutil.exe im Ordner 4.0.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe

41
Darryl Braaten

Für diejenigen von Ihnen, die das Problem nicht beheben, müssen Sie die Startbedingungen der .vdproj-Datei überprüfen und das .NET-Framework in 4 ändern: http://www.alexjamesbrown.com/uncategorized/ deploying-net-4-project-error-1001-system-badimageformatexception/

15
Stu

Wenn Sie auf einem x64-Computer kompilieren, müssen Sie unbedingt in Configuration Mgr wechseln und den Build in x64 ändern. Natürlich möchten Sie überprüfen, ob Sie die richtige Version von InstallUtil.exe verwenden. g'luck.

5
oj_n

Für mich habe ich genau rechts auf das Exe geklickt, das ich installieren wollte und auf "Unblock" geklickt

4
user3447136

Ich glaube, Sie geben die Antwort in Ihrer Frage:

"Diese Assembly wird durch eine neuere Laufzeit als die aktuell geladene Laufzeit erstellt und kann nicht geladen werden."

Sie haben die Laufzeitumgebung möglicherweise mit neueren Funktionen kompiliert (die sich in neueren Frameworks befinden), aber auf dem Computer, auf dem Sie sie registrieren, wird eine niedrigere Version ausgeführt.

Z.B. Kompilieren Sie für .NET 3.5, installieren Sie den Dienst danach jedoch auf einem .NET 2.0-Server und machen Sie keinen Sinn.

Da Sie Dienste auf dem Zielcomputer installieren können, sind Sie wahrscheinlich bereits Administrator. Aktualisieren Sie einfach das .NET-Framework auf diesem Service-Rechner.

0
BerggreenDK

Ich hatte das gleiche Problem. Anfangs befand sich mein Projekt in einem sehr langen Pfad auf D:\im Debug-Ordner meines Projekts .... Das Problem wurde gelöst, als ich die .exe-Servicedatei an einen anderen Speicherort mit einem kürzeren Pfad verschoben und damit begonnen habe "C: \". 

Ich verwende diese Batchdatei auch, um meine Dienste zu installieren

@ECHO OFF

REM Directory for .NET 4. Check for other version directories.
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%

echo Installing MyService...
echo ---------------------------------------------------
InstallUtil /i C:\ServiceFolder\MyService.exe
echo ---------------------------------------------------
echo Done.
pause
0

Haben Sie versucht, einfach MyService.exe /install in einem Eingabeaufforderungsfenster in das Verzeichnis einzugeben, das Ihren Windows-Dienst enthält? Das hat in der Vergangenheit für mich funktioniert. Sie können einen Windows-Dienst auch mit MyService.exe /uninstall deinstallieren.

0
Bernard

Wenn Sie alle oben genannten Schritte ausgeführt haben und immer noch den gleichen Fehler sehen, überprüfen Sie, ob Sie eine 32-Bit-Anwendung oder 32-Bit-DLLs haben und Ihr Server ein 64-Bit-Server ist. 

0
Aviva