サービスを数回作成してインストールしました。最初は正常に動作していましたが、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);
}
また、次の手順を試しました。
私は次のコマンドでそれをインストールおよびアンインストールしていました:
installutil AutoSMS.exe
installutil /u AutoSMS.exe
他の人が指摘したように、このエラーには多くの原因があります。しかし、これが誰かの助けになることを期待して、私たちのケースで何が起こったのかを共有します。私たちにとって、サービスは.NET 4.5にアップグレードされていましたが、サーバーには.NET 4.5がインストールされていませんでした。
私の場合、debug mode。でサービスを公開していました
解決策は:
InstallUtil -u WindowsServiceName.exe
を使用して古いサービスをアンインストールしますInstallUtil -i WindowsServiceName.exe
完璧に機能しました。
私は同じ問題に遭遇しましたが、解決方法がまったくわかりませんでした。はい、これはサービスから例外がスローされているため発生しますが、これを修正するために従うことができる一般的なガイドラインがいくつかあります。
ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new WinsowsServiceToRun() }; ServiceBase.Run(ServicesToRun);
クラスWinsowsServiceToRunで何らかの種類の無限ループが実行されていることを確認する必要があります
最後に、何もログに記録せずにプログラムを突然終了するコードが存在する場合があります(これは私の場合でした)。この場合、ソースに行を書き込む必要があるデバッグの古い学校に従う必要があります(テキスト/ db/wherever)。私が直面したのは、サービスを実行しているアカウントが「管理者」ではないため、コードが例外を記録するために「Windowsイベントログ」に書き込みをしようとしても、コードが抜け落ちて例外を記録しないことでした。 Even Logへのロギングには管理者特権は実際には必要ありませんが、ソースの定義には必要です。イベントのソースがシステムでまだ定義されていない場合、サービスは管理者権限なしで初めてログに記録しようとしますが、失敗します。これを解決するには、以下の手順に従います。
eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
.Net 4.5でこのコードをローカルで試したところ、サービスが正しく開始および停止しました。あなたの問題は、EventLogソースの作成に関係していると思われます。
メソッド:
EventLog.SourceExists("MySource")
次のドキュメントのとおり、コードを実行するユーザーは管理者である必要があります。
http://msdn.Microsoft.com/en-us/library/x7y6sy21(v = vs.110).aspx
管理者権限を持つユーザーとしてサービスが実行されていることを確認してください。
問題に少し時間を費やして、うまくいかなかった解決策を試した後、私は このブログ に出くわしました。このように、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);
}
}
}
}
次に、古いサービスをアンインストールし、これらの変更を加えてサービスを再デプロイします。サービスを開始し、イベントビューアー/アプリケーションログを確認します。実際の問題が何であるかがわかります。これがタイムアウトの根本的な理由です。
この問題に時間をかけすぎた後。 EventLog
が適切に使用されていても、すべての混乱を引き起こすことがわかりました。
この問題に取り組む人は誰でも、EventLog
を取り除くことをお勧めします。 「log4net」のような優れたツールを使用します。
これは、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
または、その瞬間にサービスと話している別のプロセスがないことを確認してください。おそらく、私は知らない競合があります
私はまったく同じ問題を抱えていました。dllのコンパイル中にデバッグモードをリリースに変更するだけです。これは私の問題を解決しました、どうして/なぜですか?私はすでに question で質問したことを知らない
これは通常、サービス自体のキャッチされない例外が原因です。 (構成ファイルのエラーなど)。コマンドプロンプトを開き、サービス実行可能ファイルを手動で起動すると、例外がスローされたことが明らかになる可能性があります。
また、構成ファイルの内容を確認する必要があります。
セクションの下で確認する必要があります。
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
上記のCozは、.netフレームワークと一致する必要があります。
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がこの問題を引き起こします。
これは古い質問であり、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フレームワークのバージョンが原因であることがわかっています。
WindowsServerコンピューターに.Net 4.6をインストールしましたが、エラーは修正されました。
コントロールは次のようになります。
今朝出会った場合、犯人は不正な設定ファイルでした。構成ファイルには、オープンコメントタグのないクローズコメントタグがありました。そのため、構成ファイルにエラーがないか再確認してください。
このエラーは、さまざまな理由で発生する可能性があります。理由を特定するには、サービスの実行時に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>);
}
考えられる理由の1つは次のとおりです。
windowsサービスの.netバージョンとシステムの.netバージョンの不一致。
私の経験では、既存のサービスを停止してコードを更新する必要がありました。コードを更新した後、サービスの開始中に「エラー1053サービスが開始要求または制御要求にタイムリーに応答しませんでした」という同じエラーが表示されました。
しかし、これはマシンの再起動後に解決されました。
このエラーをクリアするために頭を掻きましたこのエラーは、次のようなコードでデバッグしている場合に発生する可能性があります
static void Main()
{
#if DEBUG
MailService service = new MailService();
service.Ondebug();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MailService()
};
ServiceBase.Run(ServicesToRun);
#endif
}
}
このようなコードのif,else
とendif
をクリアした後、エラーは再び表示されません。
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MailService()
};
ServiceBase.Run(ServicesToRun);
}
サービスの構築
ソリューションエクスプローラーでサービスプロジェクトをビルドするには、プロジェクトのコンテキストメニューを開き、[プロパティ]を選択します。プロジェクトのプロパティページが表示されます。 [アプリケーション]タブの[スタートアップオブジェクト]リストで、[MyService.Program]を選択します。
私の場合、問題は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>
同じ問題がありました。プロジェクトのプロパティで「ClickOnceマニフェストを歌う」、「アセンブリに署名する」、「ClickOnceセキュリティ設定を有効にする」のチェックを外すと役に立ちました
私の場合、App.configファイルに、ソリューションを構築するときに気付かなかった余分なシンボルがあるようです。したがって、レジストリキーの変更、構成モードの切り替えなどの手順を実行する前に、まず構成ファイルのエラーを確認することをお勧めします。
同じ問題がありました。サービスを開始するとき、メインスレッドはメインワーカースレッドであってはならないようです。新しいスレッドを作成し、そのスレッドに主な作業を渡すだけで問題が解決しました。
サービス開始コードが正しいかどうかを確認し、
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WinsowsServiceToRun()
};
ServiceBase.Run(ServicesToRun);
また、デバッグコードを削除します。すなわち、
#If Debug
...
...
...
#else
...
...
#endif
誤って同じEventSource eventLog.Source = "MySource";
に結合された2つのサービスが実行されていました。両方のサービスをアンインストールし、エラー1053が発生したサービスを再インストールすると、サービスが正常に起動しました。
削除しました
EventLog.Exists
修正済み。
私の問題は、appsettings.json
が、ビルド中にリリースビルドフォルダーにコピーせず、...\bin\Release
フォルダーに簡単に入れてlaunchSettings.json
コンテンツをappsettings.json
にコピーする問題でした。 。