所以我在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版。
有没有人有这个问题的经验?
答案 0 :(得分:41)
您使用的是错误的installutil.exe如果您的应用程序是针对.Net 4.0构建的。使用4.0文件夹中的installutil.exe。
C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ installutil.exe
答案 1 :(得分:25)
没有人接近得到这个!
这就是我必须做的事情:
链接到帮助的code project article:
答案 2 :(得分:15)
对于那些没有发现这可以解决问题的人,您需要查看.vdproj文件的启动条件并将.NET框架更改为4:http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception/
答案 3 :(得分:5)
如果在x64机器上编译,请务必进入Configuration Mgr并将构建更改为x64。当然,您需要检查以确保您使用的是正确版本的InstallUtil.exe。 g'luck。
答案 4 :(得分:5)
对我来说,我右键单击我试图安装的exe并点击了#34; Unblock"
答案 5 :(得分:0)
我相信你在问题中提供答案:
“此程序集由比当前加载的运行时更新的运行时构建,无法加载..”
所以你可能用较新的函数(在较新的框架中)编译了运行时,但是你注册它的计算机运行的版本较低。
EG。为.NET 3.5编译,但之后在.NET 2.0上安装服务是没有意义的。
由于您可以在目标计算机上安装服务,我猜您已经是管理员了。所以只需在该服务机器上升级.NET框架。
答案 6 :(得分:0)
您是否尝试在包含Windows服务的目录中的命令提示符窗口中输入MyService.exe /install
?这在过去对我有用。您也可以使用MyService.exe /uninstall
卸载Windows服务。
答案 7 :(得分: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
答案 8 :(得分:0)
如果您尝试了以上所有操作并仍然看到相同的错误,请仔细检查您是否有32位应用程序或任何32位DLL,并且您的服务器是64位服务器。
答案 9 :(得分:0)
答案 10 :(得分:0)
为此浪费了一个小时,我要做的就是在服务路径中添加引号。
步骤1)cd C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319
在.exe路径的目录中添加引号,如图所示
步骤2)InstallUtil.exe“ E:\ MyNewService \ MyNewService \ bin \ Debug \ MyNewService.exe”