Почему я не могу установить свой сервис (среда выполнения новее, чем загруженная среда)? - PullRequest
24 голосов
/ 18 ноября 2010

Итак, я создал сервис на C # и пытаюсь использовать следующую команду для его установки:

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

Не удалось. Когда я смотрю на installLog.txt, я получаю это:

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

Тот же подход отлично работает для установки другой сборки. Я чувствую, что это может быть потому, что тот, который не работает, был написан для .NET 4.0, а тот, который работает, в 3.5.

Кто-нибудь имеет опыт решения этой проблемы?

Ответы [ 9 ]

40 голосов
/ 18 ноября 2010

Вы используете неправильный installutil.exe, если ваше приложение построено на .Net 4.0. Используйте файл installutil.exe в папке 4.0.

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

25 голосов
/ 18 ноября 2010

Никто даже не приблизился к этому!

Вот что мне нужно было сделать:

  1. Щелкните правой кнопкой мыши проект службы в Visual Studio, перейдите в «Свойства»
  2. Установите для «объекта запуска» имя службы (для него было установлено значение «(Не установлено)»).
  3. Сохранить.
  4. Сложение
  5. Попробуйте установить снова.
  6. Это работает! Ура! Мы все можем пойти домой!

Ссылка на статью проекта кода , которая помогла:

15 голосов
/ 25 июля 2011

Для тех из вас, кто не считает, что это решает их проблему, вам нужно посмотреть в Условиях запуска файла .vdproj и изменить .NET Framework на 4: http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception/

5 голосов
/ 21 сентября 2016

Для меня я просто щелкнул правой кнопкой мыши на exe, который я пытался установить, и нажал «Разблокировать»

5 голосов
/ 18 ноября 2011

Если вы компилируете на машине x64, обязательно зайдите в Configuration Mgr и измените сборку на x64. Конечно, вы хотите проверить, чтобы убедиться, что вы используете правильную версию InstallUtil.exe. g'luck.

0 голосов
/ 11 июля 2017

Если вы попробовали все вышеперечисленное и по-прежнему видите ту же ошибку, дважды проверьте, есть ли у вас 32-битное приложение или какие-либо 32-битные библиотеки DLL, а ваш сервер - 64-битный сервер.

0 голосов
/ 02 сентября 2015

У меня была такая же проблема.Первоначально мой проект находился в очень длинном пути на D: \ внутри папки отладки моего проекта.Проблема была решена, когда я переместил служебный файл .exe в другое место с более коротким путем и начал с «C: \».

Я также использую этот командный файл для установки моих служб

@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 голосов
/ 18 ноября 2010

Вы пытались просто ввести MyService.exe /install в окне командной строки в каталоге, содержащем вашу службу Windows? Это работало для меня в прошлом. Вы также можете удалить службу Windows, используя MyService.exe /uninstall.

0 голосов
/ 18 ноября 2010

Полагаю, вы даете ответ на свой вопрос:

"Эта сборка построена средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена .."

Так что вы можете иметьскомпилировал среду выполнения с более новыми функциями (которые есть в более новых Frameworks), но на компьютере, на котором вы регистрируете его, установлена ​​более низкая версия.

Например.компилировать для .NET 3.5, но впоследствии устанавливать службу на .NET 2.0 не имеет смысла.

Поскольку вы можете устанавливать службы на конечном компьютере, я думаю, вы уже являетесь администратором.Так что просто обновите .NET Framework на этом сервисном компьютере.

...