26

因此,我在 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 中的。

有没有人有这个问题的经验?

4

11 回答 11

44

如果您的应用程序是针对 .Net 4.0 构建的,则您使用了错误的 installutil.exe。使用 4.0 文件夹中的 installutil.exe。

对于 x86:

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

对于 x64:

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

于 2010-11-18T16:25:22.673 回答
27

甚至没有人接近得到这个!

这是我必须做的:

  1. 在 Visual Studio 中右键单击服务项目,转到“属性”
  2. 将“启动对象”设置为服务的名称(它已设置为值“(未设置)”)。
  3. 节省。
  4. 建造
  5. 尝试再次安装。
  6. 有用!耶!我们都可以回家了!

链接到有帮助的代码项目文章

于 2010-11-18T16:36:11.050 回答
15

对于那些没有发现这可以解决他们的问题的人,您需要查看 .vdproj 文件的启动条件并将 .NET 框架更改为 4:http ://www.alexjamesbrown.com/uncategorized/deploying- net-4-project-error-1001-system-badimageformatexception/

于 2011-07-25T13:24:32.710 回答
6

对我来说,我只是右键单击要安装的 exe,然后单击“取消阻止”

于 2016-09-21T15:03:05.267 回答
5

如果您在 x64 机器上编译,请务必进入 Configuration Mgr 并将构建更改为 x64。当然,您需要检查以确保您使用的是正确版本的 InstallUtil.exe。祝你好运。

于 2011-11-18T02:55:37.640 回答
1

有同样的问题,上面没有任何帮助 Windows Server 2019

尝试运行兼容性测试,之后注册突然起作用: 在此处输入图像描述

于 2020-03-19T09:54:22.283 回答
0

我相信您在问题中提供了答案:

“此程序集是由比当前加载的运行时更新的运行时构建的,无法加载..”

因此,您可能已经使用较新的函数(在较新的框架中)编译了运行时,但您注册它的计算机运行的是较低版本。

例如。为 .NET 3.5 编译,但之后在 .NET 2.0 上安装该服务没有意义。

由于您能够在目标机器上安装服务,我猜您已经是管理员了。因此,只需升级该服务机器上的 .NET 框架。

于 2010-11-18T15:52:16.947 回答
0

您是否尝试过MyService.exe /install在包含 Windows 服务的目录中简单地键入命令提示符窗口?这在过去对我有用。您还可以使用 卸载 Windows 服务MyService.exe /uninstall

于 2010-11-18T16:22:39.613 回答
0

如果您尝试了上述所有方法但仍然看到相同的错误,请仔细检查您是否有 32 位应用程序或任何 32 位 DLL,并且您的服务器是 64 位服务器。

于 2017-07-11T19:22:03.403 回答
0

我有同样的问题。最初,我的项目位于项目调试文件夹内的 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
于 2015-09-01T21:06:11.543 回答
0

浪费了一个小时,我所要做的就是为服务路径添加引号。

步骤 1) cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

在引号中添加.exe路径的目录,如图

步骤 2) InstallUtil.exe "E:\MyNewService\MyNewService\bin\Debug\MyNewService.exe"

参考:https ://www.codeproject.com/Answers/5143174/Installing-windows-service-error-installutil-exe-i#answer5

于 2020-07-16T10:05:24.400 回答