2010-11-18 29 views
24

Così ho costruito un servizio in C# e sto cercando di utilizzare il seguente comando per installarlo:Perché non riesco ad installare il mio servizio (runtime più recente del runtime caricato)?

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

fallisce. Quando guardo installLog.txt, ottengo questo:

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.. 

Lo stesso approccio funziona bene per l'installazione di un diverso assieme. Sento che potrebbe essere perché quello che fallisce è stato scritto per .NET 4.0, e quello che funziona è in 3.5.

Qualcuno ha qualche esperienza con questo problema?

+0

È necessario distribuire .net 4 sul server se è stata creata la configurazione in .net 4.0 – Kell

+0

Ma è possibile creare il progetto stesso in Visual Studio. Non dovrebbe significare che .NET 4.0 è già installato? – SuperNES

+0

Ho appena provato ad installarlo - è già installato. – SuperNES

risposta

25

Nessuno è venuto vicino ad ottenere questo!

Ecco cosa dovevo fare:

  1. Fare clic con il progetto di servizio in Visual Studio, andare su "Proprietà"
  2. Set "oggetto di avvio" per il nome del servizio (che era stato impostato sul valore "(Not Set)").
  3. Salva.
  4. Build
  5. Provare a installare di nuovo.
  6. Funziona! Sìì! Possiamo andare tutti a casa!

Link alla code project article che ha aiutato:

+0

Ho avuto lo stesso problema durante l'aggiornamento da .NET 2.0 a 4.0. Oltre a mancare l'oggetto Startup, il progetto di installazione e distribuzione ha fatto riferimento a .NET 2.0 come prerequisito. Avevo bisogno di aggiornare il riferimento a .Net 4.0 e aggiornare il mio bootstrapper .NET Framework a 4.0 nella finestra di dialogo dei prerequisiti. – xr280xr

+0

Non capisco mai la "tecnologia" di MS :-(. Ha funzionato per me, grazie. – greenoldman

+0

Un altro suggerimento oltre a xr280xr: se Visual Studio viene eseguito su XP (x86) e si crea un pacchetto di installazione per Windows 7x64 contenente codice a 32 bit, nella compilazione si riceve un avviso che informa che la versione del framework non corrisponde - è possibile ignora questo messaggio. Imposta il programma di installazione per CPU x64, ma scegli come target i progetti (il tuo codice) per CPU x86 o Qualsiasi CPU (a meno che tu non abbia DLL di terze parti a 32 bit) per farlo funzionare correttamente su Windows 7x64. Questo è stato l'unico modo in cui ha funzionato per me ... – Matt

0

Credo che fornisci la risposta nella tua domanda:

"Questa assemblea è costruito da un runtime più recente rispetto alla fase di esecuzione attualmente caricato e non può essere caricato .."

Quindi voi avranno compilato il runtime con funzioni più recenti (che si trovano in Framework più recenti) ma il computer su cui si sta registrando sta eseguendo una versione precedente.

Es. compilare per .NET 3.5 ma installare successivamente il servizio su .NET 2.0 non avrebbe senso.

Dato che è possibile installare servizi sul computer di destinazione, suppongo che tu sia già amministratore. Quindi basta aggiornare il framework .NET su quel servizio-macchina.

+0

ohhh anche qualcun altro ha commentato. non sapeva – BerggreenDK

+0

È un progetto .NET 4.0 e .NET 4.0 è installato sulla macchina. Sto provando ad installare sulla stessa macchina su cui ho programmato il codice: penserei che se questo fosse un problema, sarebbe stato ritagliato prima. – SuperNES

+0

Ma si utilizza il servizio di installazione 2.0? "\ Framework64 \ v2.0.50727 \ installutil.exe" – BerggreenDK

1

Hai provato a digitare semplicemente MyService.exe /install in una finestra del prompt dei comandi nella directory che contiene il servizio di Windows? Questo ha funzionato per me in passato. È anche possibile disinstallare un servizio Windows utilizzando MyService.exe /uninstall.

+0

Questo in genere non funziona per i servizi .NET, a meno che l'autore non abbia aggiunto manualmente codice per gestire l'installazione /. Questi parametri facevano parte del codice generato automaticamente per i vecchi servizi C++, così usato per essere comune - non più così. –

+0

@ O'Rooney: probabilmente hai ragione. I vecchi servizi Windows hanno maggiori probabilità di funzionare in questo modo. – Bernard

37

Si sta utilizzando l'installutil.exe errato Se l'applicazione è stata creata su .Net 4.0. Utilizzare il file installutil.exe nella cartella 4.0.

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

+0

come faccio a renderlo defualt "installutil.exe"? –

+0

@louisrhys aggiunge la directory framework 4.0 al percorso. Puoi modificare il tuo percorso di sistema per averlo per tutti i prompt di cmd o vcvarsall.bat se vuoi semplicemente cambiare se per il prompt dei comandi di Visual Studio. –

+1

@DarrylBraaten ... questa è LA soluzione :) – Umer

15

Per quelli di voi che non trovano che questo risolve il loro problema è necessario guardare nelle condizioni di avvio del file .vdproj e cambiare il.NET framework to 4: http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception/

+0

Grazie! Sì, ho anche convertito un progetto 2.0 e non l'ho nemmeno trovato finché non l'hai fatto notare. – Nexxas

+0

@Stu ... Grazie .. Questa è una buona condivisione. – Umer

+0

Grazie! Questo ha fatto il trucco per me. – DevSlick

5

Se si compila su macchina x64, assicurarsi di andare in Configuration Mgr e modificare la build in x64. Ovviamente vorrete verificare che stiate usando la versione corretta di InstallUtil.exe. g'luck.

+0

Il mio problema era che era stato compilato per x64 ma stavo usando l'installutil x86. questo era un buon consiglio – Justin

0

Ho avuto lo stesso problema. Inizialmente il mio progetto era in un percorso molto lungo su D: \ all'interno della cartella di debug del mio progetto. Il problema è stato risolto con Ho spostato il file di servizio .exe in un'altra posizione con un percorso più breve e avviato con "C: \".

Io uso anche questo file batch per installare i miei servizi

@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

Il mio sospetto è che non fosse né la lunghezza del percorso, né l'unità su cui si trovava, ma qualcosa come i caratteri spaziali nel nome di una cartella, che si poteva ottenere collegando il percorso del file di servizio in virgolette. –

3

Per quanto mi riguarda ho appena a destra a destra cliccato sul file exe che stavo cercando di installare e cliccato su "Sblocca"

0

Se si è tentato tutto quanto sopra e vediamo ancora lo stesso errore, ricontrolla se hai un'applicazione a 32 bit o qualsiasi DLL a 32 bit e il tuo server è un server a 64 bit.

Problemi correlati