0

C# で記述され、installUtil.exe ユーティリティを使用してマシンにインストールされた Windows サービスがあります。インストールが正常に完了したら、サービスを開始しようとしています。ただし、1053エラーが発生します。

本当に奇妙なことは、構成ファイルを削除すると、サービスが正常に開始されることです (ただし、構成ファイルがないため、予想される null ポインター例外のためにサービスが停止します)。

これに関する洞察はありますか?ここで途方に暮れています。同じマシンに別のサービスをインストールしましたが、正常に動作します。

注: OS は Windows 7 Home Premium x64 です。

編集 =======

明確にするために、OnStart()メソッドで (イベント ビューアーを使用して) ログを記録してみました。ログ ファイルが削除されると、すべてのログ エントリが表示され、サービスは構成ファイルからデータを取得する必要がある時点まで正常に動作します。

問題は、構成ファイルがまだ存在する場合にあるようです。メソッドの最初の行はOnStart()ログ エントリを作成しますが、プログラムはこの時点に達していません。

編集 2 ========================

protected override void OnStart(string[] args)
    {
        try
        {
            this.EventLog.WriteEntry("Starting Focus Stock Service");

このログ エントリは、構成ファイルが存在しない場合にのみログに記録されます。それ以外の場合は、この時点に到達しません。

> <?xml version="1.0"?> <configuration>   <appSettings>
>     <add key="Directory" value="C:\Logs\FocusCommon"/>
>     <add key="FileName" value="log"/>
>     <add key="LogLevel" value="3"/>
>     <add key="StockRemotingServerPort" value="10001"/>
>     <add key="StockRemotingServerName" value="FocusStockServer"/>
>     <add key="SQLServerConnStringTemplate" value="server=$server$;uid=$username$;pwd=$password$;database=$database$;MultipleActiveResultSets=True;Pooling=False;"/>
>     <add key="AccountingSynchIntervalMinutes" value="1"/>
>     <add key="LocalImageDirectory" value="C:\Focus360_Image_Dir"/>
>     <add key="LocalBrandImageDirectory" value="C:\Focus360_Image_Dir\Brands"/>
>     <add key="LocalAttachmentDirectory" value="C:\Focus360_Attachment_Dir"/>
>     <add key="EmailServer" value="maltanet.net" />
>     <add key="EmailPort" value="25" />
>     <add key="EmailUserName" value="" />
>     <add key="EmailPassword" value="" />
>     <add key="EmailUseSSL" value="false" />   </appSettings>
<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="FSS_SQLConnPool" publicKeyToken="40FEE7F833FAA042" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-1.0.4525.28539" newVersion="1.0.4525.28539"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
4

2 に答える 2

2

これは、単純なクラッシュ以外に、サービスを開始するときに問題が発生する可能性があることの1 つです。OnStart() メソッドは、ジョブを終了して戻るまでに 30 秒かかります。それよりも時間がかかる場合、サービス コントロール マネージャーは重大な問題があると見なし、サービスの開始を待機するのを停止して、エラー 1053 を生成します。

RequestAdditionalTime() を呼び出して、追加の時間を要求できます。ただし、OnStart() コードに基本的な問題がある可能性があります。30 秒というのは、サービスを開始するのにかなり長い時間です。コードのログ記録を改善することで、この問題を診断する可能性を高め、問題が発生した場所がわかるようにします。

于 2013-06-24T17:13:22.943 に答える