ServiceBase service error 193:0xc1 on Windows XP

杀马特。学长 韩版系。学妹 提交于 2019-12-20 03:27:09

问题


I have a service that I've built using the C# ServiceBase class. It works when I run it in Windows 7 and Windows Server 2008; however, it doesn't work on Windows XP.

I created the service using sc create PBUService binpath= "C:\PBULogger.exe". This is the correct path.

Nothing is logging in the Event Viewer under anything and my exception handling code doesn't fire either.

I thought maybe I didn't have the correct .NET version installed, but I have 4.0 installed on the XP machine. However, I created this project using Visual Studio Express 2012, which I'm pretty sure uses .NET 4.5 by default. Is this causing an issue? All the classes I'm using are version 4.0.

I have stripped down all my code to the base methods and this still doesn't work. Here is my code:

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();
    }
}

Since it doesn't log in the event viewer, it tells me it isn't even trying to start the service.

I found these entries in my registry for the service under 'HKEY_LOCAL_MACHINE/System/ControlSet001/Enum/Services/PBUService/Enum'.

Not really sure what it means.

Anybody know what's going on?


回答1:


You must have compiled your exe either for .Net 4.5 or for 64-bit architecture (or both). This is the explanation of error code you run into from WinError.h:

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

Make sure you have compiled it for x86 platform or Any CPU, and whatever version of .Net Framework you compiled against is installed on the machine.




回答2:


I found this after googling the windows service error number: *Generally the error message means that the service manager couldn't find the exact .exe path to run the service. Sometimes, the service is installed from a directory with multiple words for the directory name. So the registry path to the service needs to be placed with double quotes.

Click ‘Start’ and type ‘services.msc’ and hit Enter Check for the multimedia class scheduler and audio endpoint builder service. Check for the path under "path to executable:" for both the services. Make a note of the same. Also make a note of the service name for both the services. The services are as follows:

AudioEndpointBuilder - AudioEndpointBuilder Multimedia Class Scheduler - MMCSS

Now, let’s check if the paths under these two services are the same as well in the registry. Click ‘Start’, type regedit and hit Enter Locate the following key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Under services, check for these services: MMCSS and AudioEndpointBuilder. Corresponding to the above two services, the Image path (on the right pane) should be same as the path in ‘services.msc’*

I found it here




回答3:


In my case, this was due to building with target of 64-bit only. I forgot that one of my test servers running Server 2003 was 32-bit. My service runs fine on the 64-bit Server 2008 R2 box.




回答4:


I think that there is a compatibility problem with .net framework that you use and windows server 2003.Do you use .net 4.5? Windows server 2003 can't run applications which target net framework 4.5.

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

So you could change your target framework to 4.0.




回答5:


In our case this happened after a server crash and the exe file got corrupted. We re-deployed the binaries and then the service started successfully.



来源:https://stackoverflow.com/questions/14652199/servicebase-service-error-1930xc1-on-windows-xp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!