2010-11-18 12 views
24

Więc zbudowałem usługi w języku C# i próbuję użyć następującego polecenia, aby go zainstalować:Dlaczego nie mogę zainstalować mojej usługi (środowisko wykonawcze nowsze niż ładowane środowisko wykonawcze)?

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

zawiedzie. Kiedy patrzę na plik installLog.txt, otrzymuję:

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

To samo podejście sprawdza się w przypadku instalacji innego zespołu. Czuję, że może to być spowodowane tym, że ten, który zawiedzie został napisany dla .NET 4.0, a ten, który działa, jest w wersji 3.5.

Czy ktoś ma jakiekolwiek doświadczenie w tym problemie?

+0

Musisz zainstalować .net 4 na serwerze, jeśli zbudowałeś instalację w .net 4.0 – Kell

+0

Ale mogę sam zbudować projekt w Visual Studio. Czy nie powinno to oznaczać, że .NET 4.0 jest już zainstalowany? – SuperNES

+0

Po prostu próbowałem go zainstalować - jest już zainstalowany. – SuperNES

Odpowiedz

25

Nikt nawet nie zbliżył się do coraz to jedno!

Oto, co musiałem zrobić:

  1. prawym przyciskiem myszy projekt serwisowa w Visual Studio, przejdź do „Właściwości”
  2. Set „obiektu startowego” do nazwy usługi (to było ustaw na wartość "(Not Set)").
  3. Zapisz.
  4. Utwórz
  5. Spróbuj zainstalować ponownie.
  6. To działa! Yay! Wszyscy możemy wrócić do domu!

Link do code project article który pomógł:

+0

Miałem ten sam problem podczas aktualizacji z .NET 2.0 do 4.0. Oprócz brakującego obiektu Startup, projekt instalacji i wdrażania miał odniesienie .NET 2.0 jako warunek wstępny. Musiałem zaktualizować odniesienie do .Net 4.0 i zaktualizować mój bootstrapper .NET Framework do 4.0 w oknie dialogowym wymagań wstępnych. – xr280xr

+0

Nigdy nie rozumiem MS "technologia" :-(. Pracowałem dla mnie, dzięki. – greenoldman

+0

Kolejna wskazówka oprócz xr280xr: Jeśli program Visual Studio działa na XP (x86) i utworzysz pakiet instalacyjny dla systemu Windows 7x64 zawierający kod 32-bitowy, na kompilacji pojawi się ostrzeżenie informujące, że wersja ramowa nie pasuje - możesz zignoruj ​​tę wiadomość. Skonfiguruj instalator dla procesora x64, ale celuj w projekty (twój kod) dla procesora x86 lub dowolnego procesora (chyba że masz 32-bitowe biblioteki DLL innych firm), aby działał poprawnie na Windows 7x64. To był jedyny sposób, w jaki zadziałało dla mnie ... – Matt

0

wierzę podać odpowiedź na swoje pytanie:

„Ten zespół jest zbudowany przez starcie nowszej niż aktualnie załadowanego starcie i nie mogą być załadowane ..”

Więc może masz skompilowany moduł wykonawczy z nowszymi funkcjami (które są w nowszych frameworkach), ale komputer, na którym je rejestrujesz, działa w niższej wersji.

Np. kompilacja dla .NET 3.5, ale później zainstalowanie usługi na .NET 2.0 nie miałoby sensu.

Ponieważ jesteś w stanie zainstalować usługi na komputerze docelowym, domyślam się, że już jesteś administratorem. Więc po prostu zaktualizuj platformę .NET na tej maszynie usługowej.

+0

ohhh ktoś też skomentował. nie wiedział – BerggreenDK

+0

Jest to projekt .NET 4.0, a .NET 4.0 jest zainstalowany na komputerze. Próbuję zainstalować na tej samej maszynie, na której kodowałem - pomyślałbym, że gdyby to był problem, pojawiłby się wcześniej. – SuperNES

+0

Ale używasz usługi instalacji 2.0? "\ Framework64 \ v2.0.50727 \ installutil.exe" – BerggreenDK

1

Czy próbowałeś po prostu wpisać MyService.exe /install w oknie wiersza polecenia w katalogu zawierającym usługę Windows? W przeszłości to mi się udało. Możesz także odinstalować usługę Windows, używając MyService.exe /uninstall.

+0

Nie działa to na ogół w przypadku usług .NET, chyba że autor ręcznie dodał kod, aby obsłużyć/install. Te parametry były częścią kodu wygenerowanego automatycznie dla starszych usług w języku C++, więc kiedyś były powszechne - już tak nie jest. –

+0

@ O'Rooney: Najprawdopodobniej masz rację. Starsze usługi Windows częściej działają w ten sposób. – Bernard

37

Używasz niewłaściwego pliku installutil.exe Jeśli twoja aplikacja jest zbudowana na .Net 4.0. Użyj pliku installutil.exe w folderze 4.0.

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

+0

jak zrobić to defualt "installutil.exe"? –

+0

@louisrhys dodaj do swojej ścieżki katalog systemu 4.0. Możesz zmodyfikować ścieżkę systemową, aby była dostępna dla wszystkich poleceń cmd lub vcvarsall.bat, jeśli chcesz ją zmienić, jeśli dla wiersza poleceń programu visual studio. –

+1

@DarrylBraaten ... to jest rozwiązanie :) – Umer

15

Dla tych z Was, którzy nie uważają, że to rozwiązuje ich problem trzeba spojrzeć w warunkach uruchomienia pliku .vdproj i zmienić.NET Framework do 4: http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception/

+0

Dziękuję! Tak, przekonwertowałem także projekt 2.0 i nawet go nie znalazłem, dopóki tego nie wskazałeś. – Nexxas

+0

@Stu ... Dzięki .. To jest dobre udostępnianie. – Umer

+0

Dzięki! To mi się udało. – DevSlick

5

Jeśli kompilujesz na maszynie x64, pamiętaj, aby przejść do Configuration Mgr i zmienić kompilację na x64. Oczywiście warto sprawdzić, czy używasz odpowiedniej wersji pliku InstallUtil.exe. g'luck.

+0

Mój problem polegał na tym, że został skompilowany dla x64, ale używałem instalatora x86. to była dobra wskazówka. – Justin

0

Miałem ten sam problem. Początkowo mój projekt znajdował się na bardzo długiej ścieżce D: \ wewnątrz folderu debugowania mojego projektu. Problem został rozwiązany, gdy przeniosłem plik usługi .exe do innej lokalizacji z krótszą ścieżką i rozpoczynałem od "C: \".

Używam również ten plik wsadowy, aby zainstalować swoje usługi

@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

Podejrzewam, że nie była to ani długość ścieżki, ani dysk, na którym się znajdował, ale coś w rodzaju spacji w nazwie folderu, do której mógłbyś dołączyć, zamykając ścieżkę do pliku usługi w podwójne cytaty. –

3

Dla mnie w sam raz prawym kliknięciu na exe starałem się zainstalować i kliknięciu „Odblokuj”

0

Jeśli próbowałeś wszystkich powyższe i nadal widzą ten sam błąd, sprawdź dokładnie, czy masz 32-bitową aplikację lub 32-bitowe biblioteki DLL, a twój serwer to serwer 64-bitowy.

Powiązane problemy