2

我有一个使用 C# ServiceBase 类构建的服务。当我在 Windows 7 和 Windows Server 2008 中运行它时,它可以工作;但是,它不适用于 Windows XP。

在此处输入图像描述

我使用sc create PBUService binpath= "C:\PBULogger.exe". 这是正确的道路。

没有任何东西在事件查看器中登录,我的异常处理代码也没有触发。

我想也许我没有安装正确的 .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”下的服务注册表中找到了这些条目。

不太清楚这意味着什么。

在此处输入图像描述

有人知道发生了什么吗?

4

5 回答 5

10

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

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

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

于 2013-02-02T21:38:57.140 回答
2

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

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

AudioEndpointBuilder - AudioEndpointBuilder 多媒体类调度器 - MMCSS

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

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

我在这里找到了

于 2013-02-01T17:57:57.023 回答
1

就我而言,这是由于仅以 64 位为目标进行构建。我忘记了我的一台运行 Server 2003 的测试服务器是 32 位的。我的服务在 64 位 Server 2008 R2 机器上运行良好。

于 2014-06-12T20:37:34.193 回答
1

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

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

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

于 2015-04-01T14:24:30.667 回答
0

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

于 2013-08-13T13:54:32.880 回答