Windows-Dienst kann nicht installiert werden

76

Ich habe mit Visual Studio 2010 und .N ُ ET 4.0 einen sehr einfachen Fensterservice erstellt.

Diesem Dienst wurden keine Funktionen aus dem Standard-Windows-Dienstprojekt hinzugefügt, außer dass ein Installationsprogramm hinzugefügt wurde.

Wenn ich "installutil.exe appName.exe" auf meiner Entwicklungsbox oder anderen Windows 2008 R2-Computern in unserer Domäne ausführe, wird der Windows-Dienst ohne Probleme installiert.

Wenn ich versuche, dasselbe auf unserer Kundenseite zu tun, kann die Installation mit dem folgenden Fehler fehlschlagen.

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

Exception occurred while initializing the installation:
System.IO.FileLoadException: Could not load file or assembly 'file:///C:\TestService\WindowsService1.exe' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515).

Diese Lösung hat nur 1 Projekt und keine Abhängigkeiten hinzugefügt.

Ich habe es auf mehreren Maschinen in unserer Umgebung und zwei bei unseren Kunden versucht. Die Maschinen sind alle Windows 2008 R2, beide Neuinstallationen. Ein Computer hat nur .net 2.0 und .net 4.0. Die anderen .net 2, 3, 3.5 und 4.

Ich bin ein lokaler Administrator auf jedem der Computer.

Ich habe auch das 64-Bit-Installationsprogramm ausprobiert, erhalte jedoch den folgenden Fehler. Daher denke ich, dass das 32-Bit-Installationsprogramm verwendet werden muss. System.BadImageFormatException

Jede Anleitung wäre dankbar. Vielen Dank.

Matthew Dalton
quelle
Warten Sie ... enthält .NET 4 nicht bereits .NET 2/3 / 3.5?
Camilo Martin
Ja, der Dienst mit allen Frameworks, die für einen anderen Zweck installiert wurden, ich habe nur das Problem illustriert, scheint domänenbezogen zu sein.
Matthew Dalton

Antworten:

-2

Sie können versuchen, ein Setup-Projekt für Ihren Dienst zu erstellen und die MSI-Datei auf diesem Server auszuführen.

Stefan P.
quelle
12
Dies ist eher eine Problemumgehung als eine echte Lösung für das Problem
thepirat000
10
siehe die hochgestimmte Antwort unten, die wirklich als Lösung markiert werden sollte
Andy
1
Diese Funktion existiert nicht in VS 2013
cja
2
@cja es funktioniert in VS 2013, müssen Sie es von hier aus installieren visualstudiogallery.msdn.microsoft.com/…
Stefan P.
2
@ Andy - lebensrettende Ratschläge genau dort und auch eine Erinnerung, weiter auf SO-Posts zu scrollen :)
Tommy
282

Ein weiterer Grund für diesen Fehler könnte sein, dass Sie Ihr Programm von einer Quelle kopiert haben, die Windows als nicht vertrauenswürdig erachtet. Sie können die Assembly entsperren, indem Sie auf "Entsperren" klicken, nachdem Sie mit der rechten Maustaste geklickt und Eigenschaften für die Datei ausgewählt haben.

Doppelhelix
quelle
12
Dies hat bei mir funktioniert und beantwortet die Frage direkter als die Antwort "Try a Setup Project". Beide funktionieren, aber dies ist eher die Antwort auf die ursprüngliche Frage.
MKing
5
Vielen Dank! Ich bezweifle, dass ich jemals zu diesem Schluss gekommen wäre. Ich wünschte, es hätte einen besseren Grund als "Operation wird nicht unterstützt"
Ross Hambrick
10
Wenn die Blockierung nicht aufgehoben wird und sich in Ihrem Ordner / Programme befindet, verschieben Sie die EXE-Datei in Ihren Dokumentenordner, entsperren Sie sie dort und verschieben Sie sie zurück. Windows Explorer erhöht nicht die Entsperrungsanforderungen in den Ordnern / Programme.
Snives
21
Ein weiterer nützlicher Rat: Wenn Sie eine Zip-Datei vor dem Extrahieren entsperren, werden alle extrahierten Dateien automatisch entsperrt. Können Sie sie einer der Entsperrung von einem :) eine Menge Arbeit sparen
Double
2
Meine Güte, das war die einfachste Lösung! Vielen Dank.
c00000fd
16

Dateien müssen entsperrt werden. oder zumindest hat das meine repariert.

Um "Bulk" in Powershell zu entsperren

get-childitem *.* | Unblock-File 

oder unter DOS:

FOR %a in (*.*) do (echo.>%a:Zone.Identifier)
OzBob
quelle
Oder einfachget-childitem "C:\MyFolder" | unblock-file
Peet Brits
Wenn die Dateien auf einen anderen Computer übertragen werden, können Sie sie auch auf einfache Weise entsperren, indem Sie die Dateien komprimieren, über die ZIP-Datei kopieren, die ZIP-Datei entsperren und dann extrahieren. Die extrahierten Dateien werden ebenfalls entsperrt.
CDhowie
10

Dieses Problem trat bei mir auf, weil ich versuchte, den Dienst von einem Netzwerkstandort aus zu installieren. Durch Kopieren der Datei service.exe auf den lokalen Computer vor der Verwendung von installutil wurde mein Problem behoben und der Dienst erfolgreich installiert.

Brandon Ward
quelle
2
Basierend auf der Frage stackoverflow.com/questions/8524423/… könnte man das Laufzeitelement auch loadFromRemoteSourcesin der machine.config auf true setzen.
Joshua Drake
Ich musste zu den Eigenschaften jeder Datei gehen und die Datei "entsperren".
Trevor Daniel
9

Wenn wir ausführbare Dateien von einem anderen Computer kopieren, markiert Windows sie zum Schutz mit einem Flag. Klicken Sie mit der rechten Maustaste auf die ausführbare Datei und klicken Sie in den Eigenschaften auf Blockierung aufheben . Es würde das Flag löschen und die ausführbare Dienstdatei würde installiert.

Sanjay Sharma
quelle
2

Vergessen Sie nicht abzustimmen ... Probieren Sie den SC wie folgt aus: 1. Öffnen Sie die Befehlszeile. 2. Schreiben Sie den folgenden sc create ServiceName BinPath = "ExePath". Ergebnisbericht ...

user437631
quelle
Das Ergebnis ist [SC] CreateService SUCCESS, aber der Dienst kann immer noch nicht gestartet werden. Es beschwert sich, dass es die angegebene Datei nicht finden kann.
Matthew Dalton
Ich habe auch das volle Vertrauen in die Netzwerkfreigabe hinzugefügt. Trotzdem heißt es, dass die angegebene Datei nicht gefunden werden kann.
Srikanth P Vasist
1

Ich stand auch vor dem gleichen Problem. In meinem Fall habe ich eine neue Version von Dienstprogrammen bereitgestellt, neue exe- und installog-Dateien kopiert und dann versucht, die Dienstprogramme zu deinstallieren.

Ich habe die alte Version zurückkopiert, die Utils deinstalliert, die neue Version kopiert und erneut installiert. Auf jeden Fall ist es die logische Reihenfolge, der ich hätte folgen sollen.

Einmal gebissen
quelle
1

Ich habe dieses Problem und es für verschiedene zwischen der .net-Version von util und meinem Dienst
Ich verwende util für .net 2 und meinen Dienst mit .net4 bauen

Saeed-rz
quelle
1

Sie können diesen Befehl in der Entwickler-Eingabeaufforderung verwenden, um den Administrator auszuführen

installutil C:\...\MyService\bin\Debug\MyService.exe
Oguzhan KIRCALI
quelle
1
Das ist es, was er bereits tut und es löst sein Problem nicht.
Sascha
0

In meinem Fall wurde dieser Fehler dadurch verursacht, dass versehentlich das Verzeichnis mit dem Dienst an InstallUtil übergeben wurde, anstatt die Dienst-Exe zu übergeben.

Offensichtlich menschliches Versagen, aber ich fand die Fehlermeldung ziemlich irreführend.

Lawrence Johnston
quelle
0

Gemäß der obigen Antwort von @ doublehelix hat mich diese Antwort auf den richtigen Weg für mein spezielles Problem gebracht, das sich auf ein Dienstproblem unter Windows XP bezieht (Aufheben der Blockierung ist keine Option auf der Registerkarte Sicherheit, die ich finden konnte). In meinem Fall habe ich versucht, einen Dienst von einem separaten Laufwerk aus auszuführen (dh nicht auf demselben Laufwerk wie Windows und nicht unter Programmdateien), obwohl die tatsächliche physische Festplatte dieselbe war. Durch das Verschieben meines Dienstes in den Ordner "Programme" wurde das zugrunde liegende Problem behoben. (Ich wollte gegen die Antwort von @ doublehelix 'kommentieren', aber ich scheine in meinem aktuellen Status nicht dazu in der Lage zu sein).

Der Senator
quelle