2011-05-09 30 views
2

私はWindowsサービスを持っています。 OnStartメソッドでは、何らかの操作を実行していますが、操作が失敗した場合はサービスを停止します。 catchブロックで、私は、下記のコードを書いています:プログラムによるWindowsサービスの停止中にエラーが発生しました

var srvc = new System.ServiceProcess.ServiceController("Scv1", "localhost"); 
srvc.Stop(); 
srvc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped); 

これはよく仕事をしていませんが、Windowsが私にメッセージボックスを示しています。

--------------------------- 
Services 
--------------------------- 
The xxx service on Local Computer started and then stopped. Some services stop automatically if they are not in use by other services or programs. 
--------------------------- 
OK 
--------------------------- 

は、私がここで間違って何かをやっているの?どのように私はメッセージボックスを抑えますか?

答えて

0

C#で基本的なテストサービスを作成し、Windows 7にインストールしてから起動しようとしました。

using System.ServiceProcess; 

public class MyService : ServiceBase 
{ 
    static void Main() 
    { 
    System.ServiceProcess.ServiceBase.Run(new MyService()); 
    } 

    protected override void OnStart(string[] args) 
    { 
    bool failed = true; 
    // Do stuff... 
    // Oops, we failed! Time to stop! 
    if(failed) { 
     base.Stop(); 
     return; 
    } 
    base.OnStart(args); 
    } 
} 

エラーが発生した場合は、そのメッセージボックスが表示されます。このメッセージボックスはサービスの一部ではありません。サービスウィンドウにはそのメッセージボックスが表示されます。あなたは管理者のコマンドプロンプトを開き、次のように入力した場合:

net start Scv1 

次に、あなたが代わりにメッセージボックスのテキストベースのエラーメッセージが表示されます。

いずれの場合も、SCMにサービスを開始するように求めるプログラムを実行しています。サービスを開始できませんでした。その失敗はプログラムに報告されます。プログラムにエラーメッセージが表示され、ユーザーに通知されます。それはあなたのコントロールを超えています。

+0

同じことをします。サービスを停止します。問題は、Windowsがbczをポップアップするメッセージボックスです。私はそれをプログラム的に停止しています。 – Asdfg

+0

はい、同じことをしますが、正しく行います!私はあなたがそれをやっている方法が、プログラムがプログラム的に停止する適切な方法ではないことを伝えています。おそらくそれがあなたのメッセージボックスの問題の原因です。私のサービスは、起動時にエラーが発生したためにいつ停止するかを説明するメッセージボックスを投げたことはありません。 ServiceBaseの仕組みは分かりませんが、ネイティブサービスでは、サービスステータスをどのように設定したかによって、サービスが外部停止要求を受け付けていない場合でもSCMを介して停止コマンドを送信することさえできません。 –

+0

あなたが言っていることを理解していません。私は自分のコードを変更し、静的変数で私のサービスのインスタンスを保持しています。私のサービスはSystem.ServiceProcess.ServiceBaseを継承しているので、Stopを呼び出すと、ServiceBase.Stopが継承されるため、ServiceBase.Stopが呼び出されます。それでもメッセージボックスは表示されます。ネイティブサービスとは何ですか? – Asdfg

0

イベントハンドラを実際に確認することができます。あなたが設定ファイルで行った間違いをあなたに知らせるでしょう。この種のメッセージボックスの理由は、構成ファイルの構文エラーの一部になります。

関連する問題