服务错误 1053:无法及时启动

Service Error 1053: Could not start in timely fashion

在你问之前,是的,我在这个问题上搜索了又搜索,尝试了其他人为他们所做的工作,但一无所获。我试过:

我的项目摘要是一个 Windows 服务,它在设定的时间扫描源文件夹中的文件,转换它们并将它们放在目标文件夹中。这些设置可以在 GUI 中更改,GUI 会更改服务定期扫描的 XML 文件。

成品包装在InstallShield中。一切都在 VisualStudio 中运行。我可以安装该程序并且 服务完美运行 。当我使用我的发布版本并将其安装在同一台机器上时,我收到此 1053 错误。

这是我的 OnStart

    protected override void OnStart(string[] args)
    {
        // Update the service state to Start Pending.
        ServiceStatus serviceStatus = new ServiceStatus();
        serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
        serviceStatus.dwWaitHint = 100000;
        SetServiceStatus( this.ServiceHandle, ref serviceStatus );

        // Set up a timer to trigger every 30s
        System.Threading.Thread t1 = new System.Threading.Thread( new System.Threading.ThreadStart( this.InitTimer ) );
        t1.Start();

        // Set folders and time from xml
        System.Threading.Thread t2 = new System.Threading.Thread( new System.Threading.ThreadStart( this.InitSettings ) );
        t2.Start();

        // Update the service state to Running.
        eventLog1.WriteEntry( "Service successfully started", EventLogEntryType.Information, eventId++ );
        serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
        SetServiceStatus( this.ServiceHandle, ref serviceStatus );
    }

这是我的主要内容

    public WTVService(string[] args)
    {
        InitializeComponent();
        string eventSourceName = "Searcher";
        string logName = "WTVConverter";
        if ( args.Count() > 0 )
        {
            eventSourceName = args[0];
        }
        if ( args.Count() > 1 )
        {
            logName = args[1];
        }
        eventLog1 = new EventLog();
        if ( !EventLog.SourceExists( eventSourceName ) )
        {
            EventLog.CreateEventSource( eventSourceName, logName );
        }
        eventLog1.Source = eventSourceName; eventLog1.Log = logName;
    }

让我知道其他可能有用的信息。

编辑:此外,如果它有所不同,错误会立即出现,而不是在假定的 30 秒超时规则之后。

这很有趣。我确定 InstallShield 人群在这里有点受限,但这可能会对某些人有所帮助。最终起作用的是 将构建模式从 SingleImage 更改为 DVD-5。我不能说为什么,但它现在工作得很好。我在一台机器上测试过 运行 我的程序并且一切正常。

当您通过 InstallShield 部署任何服务时,您需要 select LocalSystem 用户名或管理员用户凭据。

要执行任何 windows 服务,需要 Admin 用户或 LocalSystem 用户。

因此 InstallShield 中的服务提供了用户凭据。