WCF服务作为Windows服务的问题(Windows 7)

7
我按照这里的步骤将我的现有WCF服务(已作为控制台应用程序正常运行)也部署成Windows服务,我使用的是Windows 7系统作为开发环境。
无论我尝试了什么,当进行installutil的最后一步时,命令行中会出现以下消息:
引发安装程序初始化异常:
System.BadImageFormatException: 无法加载文件或程序集 'file:///[path here]' 或它的某一个依赖项。
尝试加载格式不正确的程序。
我的控制台应用程序主类继承自ServiceBase并实现OnStartOnEnd方法。
我添加了一个ProjectInstaller类,该类继承自System.Configuration.Install.Installer,并标有[RunInstaller(true)]属性,并在构造函数中使用他们提供的代码。
我已经尝试过以下未在上述文章中提到的内容:
1.以管理员身份运行命令行 2.进入EXE文件所在目录并从那里运行installutil 3.为EXE文件及其使用的所有DLL提供强密钥
此外,在指定/LogFile=myLog.txt时,我没有得到任何日志文件。
欢迎提出任何想法,谢谢。

这似乎很明显,但请确保InstallUtil.exe来自正确版本的.Net。有时路径环境变量指向另一个版本的.Net,在这种情况下,您将收到此错误。 - Steve Ellinger
谢谢,我已经将.NET 4文件夹的路径明确添加到全局Windows路径中,我的代码也是.NET 4,所以这不是问题的原因。 - Shadow The Spring Wizard
2个回答

6

那似乎是一个32/64位问题。

你的机器是否是64位Windows 7?你的服务是否引用了一些32位的东西,比如旧的COM组件之类的?

你可能需要在Visual Studio中使用x86平台编译你的代码才能使其正常工作...


1
太准了!从没想到过。我的机器是64位的,但在代码中我没有引用任何32位的内容,也没有COM组件……也许默认是32位的,我从来没有检查过。 - Shadow The Spring Wizard

3

当程序集在较旧版本的.NET框架(例如,在没有.NET 4.0的机器上加载.NET 4.0程序集)中加载时,通常会发生BadImageFormat异常。由于您正在同一台机器上部署,我的猜测是您没有使用正确版本的installutil。

请确保使用此处提供的installutil: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319


1
谢谢,你的帖子指引我找到了解决方案:我使用的是C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319下的installutil而不是32位版本。:S - Shadow The Spring Wizard
1
+1 我之前使用的是那个版本的 installutil,但我的 Windows 服务项目中的“生成->平台目标”设置为 x86 而不是 x64。一旦我更改了这个设置,它就可以正常工作了。 - Jacobs Data Solutions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接