Windowservice错误

时间:2009-11-24 06:38:18

标签: c# .net winforms windows-services

我的解决方案包含很多项目和窗口服务。我在windowservice的应用程序端修改了编码,之后我复制了exe 关于该服务(F:\ Components \ Console \ Bin \ service.exe) 之后进入安装路径(C:\ Program Files \ syscon \ Monitor \ service.exe) 从'services.msc'停止windowservice。现在我在调试时得到服务的价值,这是以前没有得到的。但是现在当我开始  来自'services.msc'的服务我收到此错误 “无法在本地计算机上启动操作的sentinel windows资源监视器服务。错误1053: 该服务未及时响应启动或控制请求“ 可以告诉我一个解决方案吗

1 个答案:

答案 0 :(得分:2)

我们在工作期间创建了许多服务,并且我发现一种非常有用的调试方法如下:

使您的服务成为“双重应用程序”,可以作为服务运行,也可以作为普通的Windows窗体应用程序运行,由某些命令行参数控制。我将“/ gui”传递给我的服务。

void Main(string[] args)中,我检查参数:

如果缺少,我执行代码来实例化服务(Visual Studio生成的代码)。

如果它存在,我运行代码来创建一个普通的Windows窗体应用程序,其中主窗体实例化服务并相应地调用OnStartOnStop(您必须创建到期的包装方法)了解OnStartOnStop)。

当然,您必须手动添加对Windows窗体程序集的引用并自行添加Application.Run(...)之类的代码,但调试功能会大大提高,而无需经历“停止服务,复制文件,启动服务”的麻烦,失败“ - 例程。

最有可能的是,OnStart代码中存在一个错误,导致实例退出该例程,服务管理器一直在等待。

修改
以下是根据参数创建服务/ gui的方式的代码示例:

static void Main(string[] args)
{
    if (args.Length > 0 && args[0].Equals("/gui"))
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FrmGui());
    }
    else
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new SampleService() };
        ServiceBase.Run(ServicesToRun);
    }
}