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.
quelle
Antworten:
Sie können versuchen, ein Setup-Projekt für Ihren Dienst zu erstellen und die MSI-Datei auf diesem Server auszuführen.
quelle
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.
quelle
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)
quelle
get-childitem "C:\MyFolder" | unblock-file
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.
quelle
loadFromRemoteSources
in der machine.config auf true setzen.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.
quelle
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 ...
quelle
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.
quelle
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
quelle
Sie können diesen Befehl in der Entwickler-Eingabeaufforderung verwenden, um den Administrator auszuführen
quelle
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.
quelle
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).
quelle