Windows XP上的ServiceBase服务错误193:0xc1

我有一个使用C#ServiceBase类构建的服务。 它在Windows 7和Windows Server 2008中运行时有效; 但是,它在Windows XP上不起作用。

在此处输入图像描述

我使用sc create PBUService binpath= "C:\PBULogger.exe"创建了该服务。 这是正确的道路。

没有任何东西在事件查看器下登录任何东西,我的exception处理代码也不会触发。

我想也许我没有安装正确的.NET版本,但我在XP机器上安装了4.0。 但是,我使用Visual Studio Express 2012创建了这个项目,我非常确定默认使用.NET 4.5。 这会导致问题吗? 我正在使用的所有类都是4.0版。

我已经将我的所有代码都删除了基本方法,但这仍然无效。 这是我的代码:

 namespace PBULogger { class PBULoggerService : ServiceBase { protected override void OnStart(string[] args) { try { base.OnStart(args); } catch (Exception ex) { EmailUtility.sendEmail("Service Error", ex.Message + ex.StackTrace); } } protected override void OnStop() { base.OnStop(); } } 

由于它没有登录事件查看器,它告诉我它甚至没有尝试启动该服务。

我在“HKEY_LOCAL_MACHINE / System / ControlSet001 / Enum / Services / PBUService / Enum”下的服务注册表中找到了这些条目。

不太确定它意味着什么。

在此处输入图像描述

有人知道发生了什么事吗?

您必须已经为.Net 4.5或64位架构(或两者)编译了exe。 这是您从WinError.h遇到的错误代码的解释:

 // %1 is not a valid Win32 application. // #define ERROR_BAD_EXE_FORMAT 193L 

确保已为x86平台或任何CPU编译它,并且在机器上安装了您编译的.Net Framework的任何版本。

我在谷歌搜索Windows服务错误号后发现这一点:*通常错误消息意味着服务管理器找不到运行该服务的确切.exe路径。 有时,服务是从具有多个单词的目录安装的目录名称。 因此,需要使用双引号放置服务的注册表路径。

单击“开始”并键入“services.msc”并按Enter键以检查多媒体类调度程序和音频端点构建器服务。 检查两个服务的“可执行路径:”下的路径。 记下相同的。 还要记下这两种服务的服务名称。 服务如下:

AudioEndpointBuilder – AudioEndpointBuilder多媒体类调度程序 – MMCSS

现在,让我们检查这两个服务下的路径是否与注册表中的路径相同。 单击“开始”,键入regedit并按Enter键找到以下键:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \在服务下,检查以下服务:MMCSS和AudioEndpointBuilder。 对应上述两种服务,图像路径(在右侧窗格中)应与“services.msc”中的路径相同*

我在这里找到了

在我的情况下,这是由于构建目标只有64位。 我忘了运行Server 2003的一个测试服务器是32位的。 我的服务在64位Server 2008 R2框上运行良好。

我认为您使用的.net框架和Windows Server 2003存在兼容性问题。您使用.net 4.5吗? Windows Server 2003无法运行以net framework 4.5为目标的应用程序。

http://www.microsoft.com/visualstudio/eng/products/compatibility

因此,您可以将目标框架更改为4.0。

在我们的例子中,这发生在服务器崩溃和exe文件损坏之后。 我们重新部署了二进制文件,然后服务成功启动。