【发布时间】:2010-03-09 22:28:53
【问题描述】:
我创建了一个小型可执行文件,它可以通过调用MyApp.exe 作为普通应用程序启动,也可以通过调用MyApp.exe -s 作为服务启动。因为我试图保持尽可能简单,所以我通过手动运行“安装”这个应用程序
sc create MyAppService binPath= "C:\MyApp\MyApp.exe -s"
然后我像往常一样使用net start MyAppService 启动服务。
在两台 Windows XP 机器和两台 Windows 2000 机器上,这可以正常工作。但是,在两台不同的 Windows XP Embedded 机器上,当我尝试启动服务时,我收到以下消息:
发生系统错误 1083。
配置此服务运行的可执行程序未实现该服务。
在一台机器上,我可以通过卸载并重新安装 .NET 2.0 来解决这个问题,但在第二台机器上这不起作用。
我不知道如何去调试这个,而且搜索谷歌似乎只找到了失败的特定服务,例如 BITS 和 Exchange 服务。
下面是类MyApp,它是启动类,和MyAppService,它是扩展ServiceBase的类。提前感谢您对此的任何指导。
MyApp.cs
static class MyApp
{
[STAThread] static void Main( string[] args )
{
....
switch ( arg1 )
{
case "-s":
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyAppService() };
ServiceBase.Run( ServicesToRun );
break;
....
}
}
}
MyAppService.cs:
class MyAppService : ServiceBase
{
static MyAppService()
{
// ...
}
protected override void OnStart( string[] args )
{
// ...
}
}
【问题讨论】:
-
您使用的是 .NET 框架还是 .NET Compact Framework?它们是不同的。此外,除了 .NET Framework(包括 Windows 系统文件)之外,您的服务是否有任何依赖项? XPE 是高度划分的。不同的构建在内容上可能会有很大差异。
-
我使用的是普通的 .NET Framework。除了 .NET 2.0 本身之外,我知道的唯一依赖项是我在某个时候 P/Invoke SetComputerNameEx,但在服务启动期间不会触及该代码路径。我不确定如何证明我在服务启动期间是否有任何依赖关系。
-
两者的 Windows XP Embedded 版本是否相同?
-
它们不是,但我不知道其中任何一个是如何构建的。我对 XPe 不是很熟悉,我希望我必须确保在 XPe 安装中有一些特定的东西。
-
如果你能弄清楚你缺少什么,你也许可以将文件从一个系统复制到另一个系统(假设它们是相同的硬件架构)。此外,有了这些信息,进行 XPE 构建的人应该能够确定系统上需要哪些组件。如果可以,请对每个 XPE 系统上的 system32 文件夹进行比较。该列表可能足够小,足以让您开始。
标签: c# .net windows-services .net-2.0