我有一个Windows服务,我在工作时遇到了一些问题。
相关职能如下:
(编辑反映当前)
static void Main()
{
if (Debugger.IsAttached)
{
ContinuumService Service = new ContinuumService();
Service.Start(new Object[] { });
while (true)
Thread.Sleep(1);
}
else
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ContinuumService()
};
ServiceBase.Run(ServicesToRun);
}
}
public ContinuumService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
protected override void OnStop()
{
base.OnStop();
}
我的安装程序设置为“允许服务与桌面交互”(因为我似乎无法在没有这个的情况下安装服务),并且我知道该服务正在安装 - 但由于某种原因无法启动。
我的理解是服务启动命令将执行OnStart并等待该方法完成。完成后如果流程仍在运行,则服务报告正在运行...如果这是偏斜的,请告诉我。
我从安装程序返回的确切错误是“服务”[显示名称]'([名称])无法启动。验证您是否具有足够的权限来启动系统服务。';从安装程序后面生成的日志中,我得到一条带有相同消息的错误1920.
在任何一种情况下 - 我都无法提出为什么会出现这种情况的正当理由。任何建议都会很棒。
答案 0 :(得分:1)
我相信你的问题是循环和缺乏base.OnStart()和base.OnStop()调用。您可以启动和停止没有循环的基本服务,它将永久运行。实际上什么也不做的基本服务示例:
public class ExampleService : ServiceBase
{
private static void Main()
{
ServiceBase.Run(new[] { new ExampleService() });
}
public ExampleService()
{
// Name the Service
ServiceName = "Example Service";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
// Does nothing
}
protected override void OnStop()
{
base.OnStop();
}
}
尝试实现它,看它是否有效,并逐步添加逻辑和测试。
答案 1 :(得分:0)
显然我的安装程序出现了问题。在关闭,开启,关闭,向内和其他所有方向翻转选项之后,我以某种方式破坏了MSI,并且不得不重建它。完全擦除原始安装程序项目和新构建成功安装了该服务。这是Advanced Installer 9.3中的一个问题
感谢。