我有一个Windows服务。在OnStart方法中,我正在执行一些操作,如果其中一个操作失败,我希望服务停止。在Catch块中,我正在编写下面提到的代码:
var srvc = new System.ServiceProcess.ServiceController("Scv1", "localhost");
srvc.Stop();
srvc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped);
它可以很好地完成工作,但是Windows会向我显示一个消息框:
---------------------------
Services
---------------------------
The xxx service on Local Computer started and then stopped. Some services stop automatically if they are not in use by other services or programs.
---------------------------
OK
---------------------------
我在这里做错了吗?我如何压制消息框?
答案 0 :(得分:0)
我在C#中创建了一个基本测试服务,在Windows 7上安装它,然后尝试启动它。
using System.ServiceProcess;
public class MyService : ServiceBase
{
static void Main()
{
System.ServiceProcess.ServiceBase.Run( new MyService() );
}
protected override void OnStart( string[] args )
{
bool failed = true;
// Do stuff...
// Oops, we failed! Time to stop!
if( failed ) {
base.Stop();
return;
}
base.OnStart( args );
}
}
如果失败,是的,我确实看到了您描述的消息框。此消息框不是您的服务的一部分 - “服务”窗口显示该消息。如果要打开管理员命令提示符并键入以下内容:
net start Scv1
然后您会看到基于文本的错误消息而不是消息框。
在任何一种情况下,您都在运行一个程序,要求SCM启动您的服务。您的服务无法启动。该失败被报告给该计划。程序决定显示错误消息以通知用户。那是你无法控制的。
答案 1 :(得分:0)
您实际上可以检查事件处理程序。它会让你知道你在配置文件中所犯的错误。配置文件中的一些语法错误将是此类消息框的原因。