安装后为什么我的服务没有启动?

时间:2012-06-04 18:07:31

标签: c# .net service windows-services installation

我已经创建了一个Windows服务,它被设置为自动启动。我还在安装程序中添加了以下代码:

    public ProjectInstaller()
    {
        InitializeComponent();
        serviceProcessInstaller1.AfterInstall += new InstallEventHandler(serviceProcessInstaller1_AfterInstall); 
    }

    void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
    {
        try
        {
            var sc = new ServiceController(serviceInstaller1.ServiceName);
            sc.Start();
        }
        catch
        {
        }
    }

    protected override void OnCommitted(IDictionary savedState)
    {
        try
        {
            var sc = new ServiceController(serviceInstaller1.ServiceName);
            sc.Start();
        }
        catch
        {
        }
    }

服务已正确安装,但永远不会启动。

这可能是什么原因?

5 个答案:

答案 0 :(得分:1)

也许您需要输入一些临时诊断日志记录,可能使用System.IO.File.WriteAllText();。我知道这不是你想要的答案,但它可能会给你最快的解决方案!

try
{
    var sc = new ServiceController(serviceInstaller1.ServiceName);
    sc.Start();
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", "Service started");
}
catch (Exception ex)
{
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", ex.Message);
}

答案 1 :(得分:0)

Main()功能中确保您拥有此行:

ServiceBase.Run(new ServiceClass());

我几次离开后感到内疚 Application.Run(new Class()); (如果您从Windows窗体应用程序开始)

答案 2 :(得分:0)

我刚刚创建了一项服务,而我与你的服务有什么不同之处在于你是这样声明的

var sc = new ServiceController(serviceInstaller1.ServiceName);

我不是服用serviceInstaller1.ServiceName而是通过像这样的简单字符串给出名称

var sc = new ServiceController("MyService");

我认为这根本不是问题,但在谈论服务时,一切都值得一试

编辑: 现在看看它我已经看到我使用的名称实际上是DisplayName而不是服务名称,尝试手动传递或使用serviceInstaller1.DisplayName

答案 3 :(得分:0)

是否可能依赖于其他服务。或者你试过延迟开始?

答案 4 :(得分:-1)

这对我有用

protected override void OnAfterInstall(IDictionary savedState)
{
      base.OnAfterInstall(savedState);
      System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName);
      sc.Start();
}