2012-02-09 18 views
0

私はC#で電子メール通知用のコンソールアプリケーションを1つ作成しました。 このコンソールアプリケーションをウィンドウサービスに変換できますか?C#のコンソールアプリケーション用Windowsサービス

ありがとうございました。

+3

どのようにasp.netは、この質問には適用されませんか? –

+2

質問は明確ではありませんが、Windowsサービスはどのような目的を果たしますか?コンソールアプリケーションは何をしますか?あなたの質問には明確化が必要です。 –

+0

それを実行するスケジュールされたタスクを作成するだけで、速くて簡単です。なぜ完全なサービスを作るのですか? – Aristos

答えて

2

Visual Studioでは、「コンソールアプリケーション」ではなく「Windowsサービス」プロジェクトを作成します。あなたのために生成されるコードを見てください。 OnStart()メソッドとOnStop()メソッドがあります。これらは、サービスの開始と停止時に呼び出されるメソッドです。これらのメソッドにコードを記述すれば、Windowsサービスを利用できます。

0

私はこれについて説明しますが、自分自身をコンソールアプリケーションとはみなさないクラスにアプリケーションを書きます。これで、私はコンソールに書き込まないという意味です。私はlog4netを使ってすべてを書いています。ちょうどInfoにログするだけです。コンソールアプリケーションを使用してアプリケーションクラスを呼び出し、app.configでコンソールログ用のappenderを持つことができます。コンソール出力を取得します。 Windowsサービスでは、これは単にファイルに書き込むか、Infoレベルのログに書き込まれません。コンソールアプリケーションとサービスの違いに注目することは重要です。サービスはインタラクティブではなく、何も入力できないため、アプリはこれを考慮する必要があります。 Windowsサービスの場合、同じクラスを使用しますが、Windowsサービスプロジェクトを使用して開始します。

ApplicationLogic:アプリケーションを実行するためのすべてのロジックがあります。アプリを必要な方法で実行させるための引数を取ることはできますが、コンソールとやり取りすることはできません(ただし、それは悪い設計です)。すべてをログに記録します(おそらくlog4net)。

ConsoleApp:ApplicationLogicのラッパーで、ユーザーに必要な情報を入力できるようになり、入力を促してApplicationLogicに送信できます。 ApplicationLogicからの出力を見る必要がある場合は、log4netコンソールアペンダーがあります。

WindowsService:ApplicationLogicのラッパーです。ループを維持してアプリケーションロジックを実行するための所定のロジックを持っています。コンソール出力なしでファイルに記録する。

1

他の回答の示唆とは異なり、おそらくWindowsサービスを使用したいことはできません。サービスはどんな種類のユーザーインターフェイスも表示できないため、期待する「通知」は表示できません。

適切な解決策は、ウィンドウを表示せずに背景で実行される通常のアプリケーションを作成することです。これをコンソールアプリケーションで実行することはできません(よく、ですが、これを実行しないといけません)。これは、実行するたびにコンソールウィンドウが表示されるためです。しかし、標準のWindowsアプリケーション(WindowsフォームまたはWPFアプリケーションのいずれか)を作成してウィンドウを作成しないと、すべてうまく動作します。

タスクバーの通知領域にアイコンを作成して配置すると、電子メールの到着時に通知を表示することができます。 WinFormsアプリケーションを作成する場合は、NotifyIcon componentを使用して簡単に行うことができます。 (!コンパイラの助けを借りずに書かれた警告、)などの

何か:

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     // Standard infrastructure code 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     // Create a context menu and add item(s) to it 
     ContextMenu mnu = new ContextMenu(); 
     MenuItem mnuExit = new MenuItem("E&xit"); 
     mnu.MenuItems.Add(mnuExit); 
     mnuExit.Click += mnuExit_Click); 

     // Create the NotifyIcon 
     NotifyIcon ni = new NotifyIcon(); 
     ni.Icon = new Icon(GetType(), "icon.ico"); 
     ni.Text = "Email Notifier"; 
     ni.ContextMenu = mnu; 
     ni.Visible = true; 

     // Run the application 
     Application.Run(); 

     // Before exiting, remove the NotifyIcon from the taskbar 
     ni.Visible = false; 
    } 

    private static void mnuExit_Click(object Sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 
} 
関連する問題