为什么我不能安装我的服务(运行时比加载的运行时更新)?

所以我在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。

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

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

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

没人接近得到这个!

这就是我必须做的事情:

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

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

对于那些没有找到解决问题的人,你需要查看.vdproj文件的启动条件并将.NET框架更改为4: http : //www.alexjamesbrown.com/uncategorized/deploying-净-4-项目误差-1001-系统badimageformatexception /

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

对我来说,我右键单击我试图安装的exe并单击“Unblock”

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

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

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

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

由于您可以在目标计算机上安装服务,我猜您已经是管理员了。 所以只需在该服务机器上升级.NET框架。

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

我有同样的问题。 最初我的项目在我项目的调试文件夹内的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 

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