日期:2014-05-18  浏览次数:20752 次

用C#创建Windos Service问题~~~
我用C#创建了一个很简单的Windows Service,并且安装成功~~~
每次启动的时候都会说`错误 193:0xc1

MSDN上说是 "%1 is not a valid Win32 application."

有人可以告诉我怎么是是非法Win32程序,和怎么解决吗?
万分感谢~~~

参考资料:
System Error Codes (0-499):http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx

------解决方案--------------------
原因
如果服务的可执行文件路径包含空格,可能会发生此问题。

当 Windows 启动服务时,它将从左向右解析该服务的路径。如果同时满足下列两个条件,会出现上述情况: ? 服务的可执行文件的路径包含空格。
? 计算机硬盘上的文件或文件夹与服务的可执行文件路径中的文件或文件夹具有相同的名称。 
Windows 在找到并运行服务的可执行文件之前,可能会找到并试图运行该名称相同的文件或文件夹。

例如,如果服务的可执行文件路径为 C:\Program Files\MyProgram\MyService.exe,并且硬盘上也存在一个名为 C:\Program 的文件夹,则 Windows 可能在 C:\Program Files\MyProgram\My Service.exe 文件之前找到硬盘上的 C:\Program 文件夹,然后试图运行它。
回到顶端

解决方案
警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。 要解决此问题,请在 Windows 注册表中以下值的两侧添加引号,其中 <ServiceName> 是服务的名称:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>\ImagePath
值 ImagePath 包含服务的可执行文件的路径。在服务的 ImagePath 值的两侧添加引号:

1. 单击“开始”,然后单击“运行”。 
2. 在“打开”框中,键入 regedit,然后单击“确定”。 
3. 找到以下注册表项,然后单击该项,其中 <ServiceName> 是服务的名称:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>。
例如,如果服务的名称为 MyService,则找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService 项。 
4. 在右窗格中,双击 ImagePath。 
5. 在“数值数据”框中,在该服务的可执行文件的完整路径的两侧添加引号。

例如,如果 MyService 服务的路径为 C:\Program Files\MyProgram\MyService.exe,则将 MyService 服务的“数值数据”框中的项更改为以下形式
"C:\Program Files\MyProgram\MyService.exe" 
6. 单击“确定”,然后退出注册表编辑器。 


http://support.microsoft.com/kb/812486
------解决方案--------------------
TO sunking_426: 
你的服务程序里包含了UI吗?写个往EVENT LOG里送"Hello world"的service也不行吗?
如果service安装成功了的话,就不应该是路径上的问题。
------解决方案--------------------
很可能是你的服务在启动的时候就已经异常了。
你把代码copy到一个console application里面运行,看是不是会抛出异常?

或者你创建的应用程序类型不是Windows Service类型,或带有Installer class的console application。