无法首次启动Windows服务

时间:2015-02-17 05:44:03

标签: c# windows-services

我使用C#控制台应用程序安装并启动服务。

使用WinAPI安装服务:

try
{
    //Open sc manager
    IntPtr sc_handle = OpenSCManager(null, null, SC_MANAGER_CREATE_SERVICE);
    if (sc_handle.ToInt32() != 0)
    {
        //Create service
        IntPtr sv_handle = CreateService(sc_handle, svcName, svcDispName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, svcPath, null, 0, null, null, null);

        //If failed
        if (sv_handle.ToInt32() == 0)
        {
            CloseServiceHandle(sc_handle);
            return false;
        }
        else //If succeeded
        {
            CloseServiceHandle(sv_handle);
            CloseServiceHandle(sc_handle);
            return true;
        }
    }
    else
        return false;
}
catch (Exception e)
{
    throw e;
}

启动服务:

//Start the newly installed service
try
{
    System.ServiceProcess.ServiceController newService = GetService(application.StartupName);

    //If service is stopped or stopping
    if (newService.Status == System.ServiceProcess.ServiceControllerStatus.StopPending ||
        newService.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
    {
        newService.Start();

        newService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, TimeSpan.FromMilliseconds(300.0));
    }

    return true;
}
catch (Exception e)
{
    return false;
}

设置服务时,我会安装并启动它。

当我为一个非常简单的服务(除了将其事件记录到文本文件之外什么都不做)这样做时,它在尝试启动服务时第一次失败。

对WaitForStatus的调用失败(超时错误)。

如果我卸载了该服务(sc delete servicename),删除它所记录的文件,并以相同的OR或不同的名称再次安装/启动该服务,每次都可以正常工作。

如果我卸载服务并在注册表中搜索服务名称,则没有结果。

我在3台不同的机器(Windows 8和Windows 7)上尝试过这种故障排除方式。我没有其他机器可以测试,无法重现问题。我甚至在第一次安装/启动服务之前将系统还原到了一个点,它仍然可以正常工作。

有人有任何想法吗?

0 个答案:

没有答案
相关问题