我有一个使用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'。
不确定这意味着什么。
有人知道发生了什么吗?
答案 0 :(得分:9)
您必须已经为.Net 4.5或64位架构(或两者)编译了exe。这是您从WinError.h:
遇到的错误代码的说明// %1 is not a valid Win32 application.
//
#define ERROR_BAD_EXE_FORMAT 193L
确保已为x86平台或任何CPU编译它,并且在计算机上安装了您编译的.Net Framework的任何版本。
答案 1 :(得分:2)
我在google搜索Windows服务错误号后发现了这个: *通常,错误消息表示服务管理器找不到运行服务的确切.exe路径。有时,服务是从具有多个单词的目录安装的目录名称。因此,需要使用双引号放置服务的注册表路径。
单击“开始”并键入“services.msc”并按Enter键 检查多媒体类调度程序和音频端点构建器服务。 检查两个服务的“可执行路径:”下的路径。记下相同的。 还要记下这两种服务的服务名称。 服务如下:
AudioEndpointBuilder - AudioEndpointBuilder 多媒体课程安排 - MMCSS
现在,让我们检查这两个服务下的路径是否与注册表中的路径相同。 单击“开始”,键入regedit并按Enter键 找到以下密钥:
HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\ 在服务下,检查这些服务:MMCSS和AudioEndpointBuilder。 对应上述两种服务,图像路径(在右窗格中)应与'services.msc'中的路径相同* *
我发现它here
答案 2 :(得分:1)
在我的情况下,这是由于仅使用64位目标构建。我忘了我运行Server 2003的一个测试服务器是32位的。我的服务在64位Server 2008 R2框上运行良好。
答案 3 :(得分: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。
答案 4 :(得分:0)
在我们的案例中,这发生在服务器崩溃并且exe文件损坏之后。我们重新部署了二进制文件,然后服务成功启动。