web-dev-qa-db-ja.com

エラー1053サービスは開始要求または制御要求にタイムリーに応答しませんでした

サービスを数回作成してインストールしました。最初は正常に動作していましたが、Services Codeを少し変更した後、Services.mscでサービスを再起動するとエラーが発生し始めました。

エラー1053:サービスは開始または制御要求にタイムリーに応答しませんでした

コード:

public partial class AutoSMS : ServiceBase
{
    public AutoSMS()
    {
        InitializeComponent();
        eventLog1.Clear();

        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";

        Timer checkForTime = new Timer(5000);
        checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
        checkForTime.Enabled = true;

    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("In OnStart");
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("In onStop.");
    }


    void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
    {
        string Time = "15:05:00";
        DateTime dateTime = DateTime.ParseExact(Time, "HH:mm:ss",
                                        CultureInfo.InvariantCulture);

        if (DateTime.Now == dateTime) ;
            eventLog1.WriteEntry(Time);
    }
}

ここに私のメインメソッドコードがあります

static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new AutoSMS() 
    };
    ServiceBase.Run(ServicesToRun);
}

また、次の手順を試しました。

  • [スタート]> [実行]に移動し、regeditと入力します。
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Controlに移動します
  • コントロールフォルダーを選択した状態で、右側のペインを右クリックし、新しいDWORD値を選択します
  • 新しいDWORDに名前を付けます:ServicesPipeTimeout
  • [ServicesPipeTimeout]を右クリックし、[修正]をクリックします。
  • [10進数]をクリックし、「180000」と入力して、[OK]をクリックします
  • コンピューターを再起動します

私は次のコマンドでそれをインストールおよびアンインストールしていました:

installutil AutoSMS.exe

installutil /u AutoSMS.exe
47
Neeraj Verma

他の人が指摘したように、このエラーには多くの原因があります。しかし、これが誰かの助けになることを期待して、私たちのケースで何が起こったのかを共有します。私たちにとって、サービスは.NET 4.5にアップグレードされていましたが、サーバーには.NET 4.5がインストールされていませんでした。

24
JamesQMurphy

私の場合、debug mode。でサービスを公開していました

解決策は:

  • ソリューションをリリースモードに変更
  • コマンドInstallUtil -u WindowsServiceName.exeを使用して古いサービスをアンインストールします
  • サービスの再インストールInstallUtil -i WindowsServiceName.exe

完璧に機能しました。

23
Pranav Singh

私は同じ問題に遭遇しましたが、解決方法がまったくわかりませんでした。はい、これはサービスから例外がスローされているため発生しますが、これを修正するために従うことができる一般的なガイドラインがいくつかあります。

  • サービスを開始するための正しいコードを記述したことを確認してください:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new WinsowsServiceToRun() }; ServiceBase.Run(ServicesToRun);
  • クラスWinsowsServiceToRunで何らかの種類の無限ループが実行されていることを確認する必要があります

  • 最後に、何もログに記録せずにプログラムを突然終了するコードが存在する場合があります(これは私の場合でした)。この場合、ソースに行を書き込む必要があるデバッグの古い学校に従う必要があります(テキスト/ db/wherever)。私が直面したのは、サービスを実行しているアカウントが「管理者」ではないため、コードが例外を記録するために「Windowsイベントログ」に書き込みをしようとしても、コードが抜け落ちて例外を記録しないことでした。 Even Logへのロギングには管理者特権は実際には必要ありませんが、ソースの定義には必要です。イベントのソースがシステムでまだ定義されていない場合、サービスは管理者権限なしで初めてログに記録しようとしますが、失敗します。これを解決するには、以下の手順に従います。

    1. 管理者権限でコマンドプロンプトを開く
    2. コマンドを貼り付けます:eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
    3. Enterを押す
    4. 今すぐサービスを開始
10
Akash Sahay

.Net 4.5でこのコードをローカルで試したところ、サービスが正しく開始および停止しました。あなたの問題は、EventLogソースの作成に関係していると思われます。

メソッド:

EventLog.SourceExists("MySource")

次のドキュメントのとおり、コードを実行するユーザーは管理者である必要があります。

http://msdn.Microsoft.com/en-us/library/x7y6sy21(v = vs.110).aspx

管理者権限を持つユーザーとしてサービスが実行されていることを確認してください。

9
devduder

問題に少し時間を費やして、うまくいかなかった解決策を試した後、私は このブログ に出くわしました。このように、try/catchブロックでサービス初期化コードをラップし、EventLogを追加することをお勧めします

using System;
using System.Diagnostics;
using System.ServiceProcess;

namespace WindowsService
{
    static class Program
    {
        static void Main()
        {
            try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
            }
        }
    }
}

次に、古いサービスをアンインストールし、これらの変更を加えてサービスを再デプロイします。サービスを開始し、イベントビューアー/アプリケーションログを確認します。実際の問題が何であるかがわかります。これがタイムアウトの根本的な理由です。

9
JS5

この問題に時間をかけすぎた後。 EventLogが適切に使用されていても、すべての混乱を引き起こすことがわかりました。

この問題に取り組む人は誰でも、EventLogを取り除くことをお勧めします。 「log4net」のような優れたツールを使用します。

5
Jacob

これは、Microsoft Windowsサービスコントロールが原因であり、サービスの状態を制御する場合があります。サービスが30秒以内に応答を送信しない場合、このエラーが発生します。

レジストリを変更して、サービスが応答する時間を増やすことができます

Go to Start > Run > and type regedit
Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
With the control folder selected, right click in the pane on the right and select new DWORD Value
Name the new DWORD: ServicesPipeTimeout 
Right-click ServicesPipeTimeout, and then click Modify
Click Decimal, type '180000', and then click OK
Restart the computer

または、その瞬間にサービスと話している別のプロセスがないことを確認してください。おそらく、私は知らない競合があります

4
Alberto Perez

私はまったく同じ問題を抱えていました。dllのコンパイル中にデバッグモードをリリースに変更するだけです。これは私の問題を解決しました、どうして/なぜですか?私はすでに question で質問したことを知らない

3
ahsant

これは通常、サービス自体のキャッチされない例外が原因です。 (構成ファイルのエラーなど)。コマンドプロンプトを開き、サービス実行可能ファイルを手動で起動すると、例外がスローされたことが明らかになる可能性があります。

1
Robert Pouleijn

また、構成ファイルの内容を確認する必要があります。

セクションの下で確認する必要があります。

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>

上記のCozは、.netフレームワークと一致する必要があります。

1
NoughT

ConnectionStringsまたはサービスの起動時にデータベース接続を開始する他の手段を使用している場合は、EntityFrameworkを確認してください。

私の場合、エラーError 1053 the service did not respond to the start or control request in a timely fashionを受け取ったとき、これが間違っていました:

EntityFrameworkを使用していて、接続文字列が間違っていました。そのため、基本的に、起動時にEntityFrameworkが誤った接続文字列を使用してデータベースに接続できず、タイムアウトしました。

データベース接続文字列を正しいものに置き換える必要があり、正常に機能しました。

フレームワークの更新や他のシステム/構成の変更はまったく必要ありませんでした。

この問題の考えられる解決策の1つ[私の問題を修正し、私のアプリケーションはJavaベースのアプリケーションです]:

1)アプリケーションが正しいJavaバージョンを指していることを確認します(アプリケーションのJavaバージョンとパスを確認します)。

または

2)構成されたJavaバージョンを確認します。つまり、アプリケーションに基づいて32ビットバージョンか64ビットバージョンかを確認します。 32ビットを使用している場合は、32ビットバージョンのJSLを使用する必要があります。そうしないと、JSLがこの問題を引き起こします。

1
Suresh Reddy

これは古い質問であり、VB.NET Windowsサービスを独自に作成していたため、MS Windows 7およびMS Windows 10で起動しても問題ありません。

最新のMS Windows 10パッチにWindowsサービスをインストールすると、この問題が発生します。 Windowsサービスが実行されない理由は、Windowsサービスの実行に必要な.NETバージョンがインストールされたPCに存在しないためです。

Windowsサービスをインストールした後。たとえばC:\ Program files(x86)\ Service1\Service1.exeなどのインストールフォルダーに移動し、ダブルクリックして実行します。 .NET frameworkパッケージが欠落している場合は、ユーザーにダウンロードを促すメッセージが表示されます。ダウンロードしてインストールするのを待ってください。

その後、services.mscでWindowsサービスを再起動します。この答えが問題に直面している人を助けることを願っています。問題は.NETフレームワークのバージョンが原因であることがわかっています。

1
Seng Yee Lee

WindowsServerコンピューターに.Net 4.6をインストールしましたが、エラーは修正されました。

コントロールは次のようになります。

  1. WindowsServiceの.netバージョンを確認してください
  2. 次に、コンピューターの.netバージョンを確認します
  3. おそらく一致しないため、そのバージョンに一致する
1
Metin Atalay

これは私のために働いた。基本的に、ログオンユーザーが正しいユーザーに設定されていることを確認します。ただし、アカウントインフラストラクチャの設定方法によって異なります。私の例では、ADアカウントのユーザー資格情報を使用しています。

起動メニューで「サービス」を検索します-サービスで必要なサービスを見つけます-右クリックして「ログオン」タブを選択します-「このアカウント」を選択して必要なコンテンツ/資格情報を入力します-通常どおりサービスを開始します

enter image description here

1
d689p

今朝出会った場合、犯人は不正な設定ファイルでした。構成ファイルには、オープンコメントタグのないクローズコメントタグがありました。そのため、構成ファイルにエラーがないか再確認してください。

1

このエラーは、さまざまな理由で発生する可能性があります。理由を特定するには、サービスの実行時にtry/catchを追加します。

        try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                <span class="skimlinks-unlinked">ServiceBase.Run(ServicesToRun</span>);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), <span class="skimlinks-unlinked">EventLogEntryType.Error</span>);
            }
0
DevT

考えられる理由の1つは次のとおりです。

windowsサービスの.netバージョンとシステムの.netバージョンの不一致。

0
Divyang Shah

私の経験では、既存のサービスを停止してコードを更新する必要がありました。コードを更新した後、サービスの開始中に「エラー1053サービスが開始要求または制御要求にタイムリーに応答しませんでした」という同じエラーが表示されました。

しかし、これはマシンの再起動後に解決されました。

0
KirtiSagar

このエラーをクリアするために頭を掻きましたこのエラーは、次のようなコードでデバッグしている場合に発生する可能性があります

static void Main()
{
 #if DEBUG
            MailService service = new MailService();
             service.Ondebug();
 #else
             ServiceBase[] ServicesToRun;
             ServicesToRun = new ServiceBase[]
             {
                 new MailService()
             };
             ServiceBase.Run(ServicesToRun);
 #endif
         }
     }

このようなコードのif,elseendifをクリアした後、エラーは再び表示されません。

static void Main()
{

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new MailService()
    };
    ServiceBase.Run(ServicesToRun);

}
0

サービスの構築

ソリューションエクスプローラーでサービスプロジェクトをビルドするには、プロジェクトのコンテキストメニューを開き、[プロパティ]を選択します。プロジェクトのプロパティページが表示されます。 [アプリケーション]タブの[スタートアップオブジェクト]リストで、[MyService.Program]を選択します。

0
Mahdi

私の場合、問題はApp.configファイルで設定されている構成のキャッシュに関するものでした。 App.configファイルから以下の行を削除すると、問題は解決しました。

<cachingConfiguration defaultCacheManager="MyCacheManager">
<cacheManagers>
  <add name="MyCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       expirationPollFrequencyInSeconds="60"
       maximumElementsInCacheBeforeScavenging="50000"
       numberToRemoveWhenScavenging="1000"
       backingStoreName="NullBackingStore" />
</cacheManagers>
<backingStores>
  <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       name="NullBackingStore" />
</backingStores>
0
Burak Karakuş

同じ問題がありました。プロジェクトのプロパティで「ClickOnceマニフェストを歌う」、「アセンブリに署名する」、「ClickOnceセキュリティ設定を有効にする」のチェックを外すと役に立ちました

0
user3210023

私の場合、App.configファイルに、ソリューションを構築するときに気付かなかった余分なシンボルがあるようです。したがって、レジストリキーの変更、構成モードの切り替えなどの手順を実行する前に、まず構成ファイルのエラーを確認することをお勧めします。

0
Anastasia

同じ問題がありました。サービスを開始するとき、メインスレッドはメインワーカースレッドであってはならないようです。新しいスレッドを作成し、そのスレッドに主な作業を渡すだけで問題が解決しました。

0

サービス開始コードが正しいかどうかを確認し、

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new WinsowsServiceToRun() 
};
ServiceBase.Run(ServicesToRun);

また、デバッグコードを削除します。すなわち、

  #If Debug
         ...
         ...
         ...
        #else
         ...
         ...
        #endif
0
Amey P Naik

誤って同じEventSource eventLog.Source = "MySource";に結合された2つのサービスが実行されていました。両方のサービスをアンインストールし、エラー1053が発生したサービスを再インストールすると、サービスが正常に起動しました。

削除しました

EventLog.Exists

修正済み。

0
cacheoff

私の問題は、appsettings.jsonが、ビルド中にリリースビルドフォルダーにコピーせず、...\bin\Releaseフォルダーに簡単に入れてlaunchSettings.jsonコンテンツをappsettings.jsonにコピーする問題でした。 。

0
EPS