Windowsサービスを開始しようとしたときに、「他のサービスで使用されていないサービスが自動的に停止する」というエラーが発生しました。
Windowsサービス構成ファイルを使用せず、静的プロパティを使用するサービスがあります-正常に動作します
今、私はapp.configファイルを使用して、セットアッププロジェクトとサービスプロジェクトを再構築します。今、私はサービスをインストールしてからサービスを開始しようとします-私は次のエラーを受け取ります:
一部のサービスは、他のサービスで使用されていない場合、自動的に停止します
サービスはローカルシステムとしてログオンします。
どんな入力でも大歓迎です!ありがとう。
これは通常、次の2つのいずれかの結果です。(a)OnStart()
メソッドが例外をスローするか、(b)OnStart()
メソッドがスレッドを起動して動作しない。
問題が(a)の場合、明らかな解決策は、サービスをデバッグして、何が問題なのかを特定することです。少なくとも、OnStart()
メソッドの内容を_try-catch
_ブロックで囲み、例外が発生したときにシステムイベントログにエラーを記録します。その後、Windowsイベントビューアで詳細を確認できます。
問題が(b)の場合、実際に何かを行うスレッドを作成する必要があります。スレッドは、サービスがシャットダウンしないように(バックグラウンドスレッドとは対照的に)フォアグラウンドスレッドである必要があります。典型的なOnStart()
メソッドは次のようになります。
_private System.Threading.Thread _thread;
protected override void OnStart(string[] args)
{
try
{
// Uncomment this line to debug...
//System.Diagnostics.Debugger.Break();
// Create the thread object that will do the service's work.
_thread = new System.Threading.Thread(DoWork);
// Start the thread.
_thread.Start();
// Log an event to indicate successful start.
EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
}
catch (Exception ex)
{
// Log the exception.
EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
}
}
private void DoWork()
{
// Do the service work here...
}
_
このエラーが発生したのは、ハードドライブがいっぱいになったためです。サービスの実行を妨げるものであれば何でもかまいません。
サービスの開始中に同じエラーが発生しました。私が行ってアプリケーションログをチェックしたとき、エラーはtelnetに関連しています。それはtelnet(23)のポートが別のサービスに関与していることを意味します。その後、問題なく開始できる各サービス。
ServiceInstaller.msiでinstallUtil.cmdを実行すると、dllが作成されなかったため、同じエラーが発生しました。これを修正するために、プロジェクトに必要な各DLLにこれらの=> <File Id="Interception" Source="$(var.SourceDir)\Microsoft.Practices.Unity.Interception.dll" />
の1つを含め、Service.wxsファイルに配置する必要がありました。このように=> <Fragment><DirectoryRef Id="ApplicationDirectory"><Component Id="ServiceID" Guid="$(var.ServiceGuid)"> *here* <closing tags...>
。そして、すべてのdllがインストーラーのx copyコマンドに含まれていることを確認してください:)
お役に立てれば!