2

コンソール アプリケーションから Windows サービスを作成することは可能ですか。実際、データベースから人にメールを送信するコンソール アプリケーションを作成しましたが、ほぼ同じコードでサービスを作成しようとすると、機能しませんでした。インストール後、メールが送信されなくなりました。そこで、自動送信したいのと、タスクシェデュラーを使いたくないので、方法があればコンソールアプリをサービス化したいと考えています。

これが私のコンソールアプリケーションのメインです

     {
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(ConfigurationManager.AppSettings["email"]);
        mail.Subject = "Rappel délai tâche";
        SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["domaine"]);
        client.EnableSsl = true;

        client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["email"], ConfigurationManager.AppSettings["password"]); 

        BDGestionEntities bd = new BDGestionEntities();
        TimeSpan diff;
        DateTime aujourdhui = DateTime.Today;
        List <tache> taches = bd.taches.ToList();

        foreach (var k in taches)
        {
            Console.WriteLine(k.nom_tache);
            diff = k.date_fin.Subtract(aujourdhui);
            int datediff = Convert.ToInt32(diff.TotalDays);
            if (datediff <= 2)
            {



                mail.To.Add(k.utilisateur.email);

                mail.Body = "Bonjour, " + k.utilisateur.nom + " " + k.utilisateur.prenom +
                    "\n\nNous vous envoyons le présent mail pour vous rappeler que la tâche \"" + k.nom_tache + "\" qui vous est accordée touchera à sa fin d'ici deux jours.\nVeuillez respecter le délai. \n\n Bien cordialement.";
                try
                {
                    client.Send(mail);
                    Console.WriteLine("Email envoyé");
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }
        }
    }

実際、私は自分のデータベースにアクセスするために ado .net のモデルを使用しています

4

5 に答える 5

1

すぐに変換するのではなく、最初に非常に単純なサービスを作成して、それがどのように機能するかを理解してみます。たぶん、5分ごとに日付と時刻をファイルに書き込むような単純なものです。次に、サービス本体にコードを追加してみてください。

明らかに、画面に書き込むものはすべて避けたいと思うでしょう。これは、ログまたはイベントビューアのいずれかに書き込む必要があります。

于 2012-08-15T10:32:39.523 に答える
1

基本的なコードは機能します。サービス部分に移動するだけです。ただし、サービスはデフォルトで画面にアクセスできず、コンソールが割り当てられていないため、コンソールの書き込み行でクラッシュする可能性があります。

Visual Studioを使用する場合は、サービスのテンプレートになります。しかし、ほぼ同じ作業を行うことができます。実際にサービスを変更したので、パラメーター/ consoleがコンソールに割り当てられていれば、コマンドラインから実行できるので、使用したり、デバッグしたりできます。

于 2012-08-15T10:32:42.087 に答える
1

その解決策を見つけました。実際、これは単なる接続の問題であり、データベースにアクセスできるようにするために、サービスにアクセス許可を追加するだけで済みました。みんなありがとう。

于 2012-08-23T15:52:35.977 に答える
0

Windows 2003 Server リソース キットには、Windows アプリケーション用の Windows ユーザー定義サービスを作成できる 2 つのユーティリティが用意されています。

Instrsrv.exe はシステム サービスをインストールおよび削除し、Srvany.exe は任意の Windows アプリケーションをサービスとして実行できるようにします。

このMicrosoft サポート記事にその方法が示されています。

于 2012-08-15T12:14:29.393 に答える
0

Windows サービスには、コンソール アプリケーションよりも多くの機能があります。ソースがあれば変換するか、既存のサービス ラッパーを使用できます。アプリケーションを変換する場合は、次のいずれかから開始することをお勧めします。

サービス ラッパーを使用したい場合、これは興味深いかもしれませんし、他の製品も同様です。

于 2012-08-15T09:56:27.547 に答える