web-dev-qa-db-ja.com

一部のサービスは、他のサービスによって使用されていない場合、自動的に停止します

Windowsサービスを開始しようとしたときに、「他のサービスで使用されていないサービスが自動的に停止する」というエラーが発生しました。

Windowsサービス構成ファイルを使用せず、静的プロパティを使用するサービスがあります-正常に動作します

今、私はapp.configファイルを使用して、セットアッププロジェクトとサービスプロジェクトを再構築します。今、私はサービスをインストールしてからサービスを開始しようとします-私は次のエラーを受け取ります:

一部のサービスは、他のサービスで使用されていない場合、自動的に停止します

サービスはローカルシステムとしてログオンします。

どんな入力でも大歓迎です!ありがとう。

20
paras_doshi

これは通常、次の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...
}
_
38
Matt Davis

このエラーが発生したのは、ハードドライブがいっぱいになったためです。サービスの実行を妨げるものであれば何でもかまいません。

3
BBoyd

サービスの開始中に同じエラーが発生しました。私が行ってアプリケーションログをチェックしたとき、エラーはtelnetに関連しています。それはtelnet(23)のポートが別のサービスに関与していることを意味します。その後、問題なく開始できる各サービス。

0
Shashidhar

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コマンドに含まれていることを確認してください:)

お役に立てれば!

0
CRoberts