2009-08-21 5 views
6

私はすべての従業員に毎月電子メールを送信するシンプルなWindowsサービスを作成しています。私の質問は、それが終わったときにどうやって止めるかです。私はこのフィールドのnoobieだから私を助けてください。本当に感謝。プログラムを使用してWindowsサービスを停止する方法はありますか。

毎月実行されるようにサーバーに展開されます。私はこのことを始めず、そのようなコードが私に与えられました。これはVB.NETで書かれています。私は今、いくつかのことを変更するように求められています。私は「Sub OnStart」だけがあることに気付き、いつサービスが停止するのか疑問に思いましたか?メインサブが終了した後、このサービスのステータスはどうなりますか?それは停止されているか、ただそこに掛けられていますか?申し訳ありませんが、私が言ったように、私はこれに本当に新しいです....

答えて

7

月に再発するタスクがある場合は、コンソールアプリを作成し、月に実行するようにWindows Task Schedulerを使用する方が良いかもしれません。このサービスは、これがWin32サービス(つまり、CまたはC++で書かれた)、その後、あなたは、単にSetServiceStatusを(呼び出している場合

+0

これはサーバー上に展開され、毎月実行されます。私はこのことを始めず、そのようなコードが私に与えられました。これはVB.NETで書かれています。私は今、いくつかのことを変更するように求められています。私は「Sub OnStart」だけがあることに気付き、いつサービスが停止するのか疑問に思いましたか?メインサブが終了した後、このサービスのステータスはどうなりますか?それは停止されているか、ただそこに掛けられていますか?申し訳ありませんが、私が言ったように、私はこれに本当に新しいです.... – cplusplusNewbie

+1

これはあなたの新しいこれは、自分自身を良く見せて、マクロスの提案で意思決定者にアプローチする良い時間です。サービスは1ヶ月に1回の使用ではなく、連続しています。あなたが言及したケースでは、コードをWindowsサービスからコンソールアプリケーションに引き出すことは非常に簡単です。 – MattH

3

ログオンしているユーザーの有無にかかわらず、常に長い時間のために実行したりする必要がプロセスのために使用すべきですSERVICE_STOPPED)、ServiceMainから戻ります。

一方、1か月に1回メールを送信するだけの場合、なぜサービスを使用していますか? Windowsタスクスケジューラを使用し、通常のアプリケーションまたはスクリプトを実行します。

0

スケジュールされたタスクとしてこれを書く方が良いかもしれませんが、最初は開発しやすいでしょう。その後、自然に終了し、残りの月間にリソースを消費することはありません。

元の質問に答えるために、あなたがC#の

services = System.ServiceProcess.ServiceController.GetServices(); 

で現在実行中のサービスのリストを取得することができますそして、あなたが望む1を探し、全

locatedService.Status == ServiceControllerStatus.Stopped 

を停止するステータスを設定例on msdn

0

net stop [service_name] ...コマンドラインでもそれを行います。

しかし、私は他の人と同意します。 Windowsタスクスケジューラがあなたのニーズをより良く満たすと思われます。

6

その他のすべての回答には、スケジュールされたタスクとして実行する実行可能ファイルまたはスクリプトである必要があります。

Windowsサービスとして実行する必要があり、.NETで作業する必要がある場合は、サービスが完了したらServiceBaseから継承したStop()メソッドを呼び出すだけで済みます。メソッドのMSDNドキュメントから:

Stopメソッドは、停止が保留と OnStopメソッドを呼び出していることを示すためにサービス状態 を設定します。 アプリケーションが停止した後、サービス の状態はstoppedに設定されます。 アプリケーションがホストされたサービスの場合、 アプリケーションドメインはアンロードされます。

重要な注意点が1つあります。サービスを実行するユーザーアカウントにサービスを停止する権限が必要です(ServerFaultのトピック)。サービス自体の内部またはからStop を呼び出すことによって

  • プログラムにより、:

    サービスのOnStartメソッドが完了すると何かが、次のいずれかの方法で停止することを告げるまで、それは(何もしない)を実行し続けます 外部プロセスusing the method Colin Gravill describes in his answer

  • コマンドライン経由。
  • コンピュータ管理コンソールの[サービス]パネルを使用します。
0

それ理由があるのWindowsサービスであることをを持っていますか?そうでない場合は、@Macrosソリューションに従ってください。しかし、もしそうなら、なぜサービスを停止するのですか?停止すると、電子メールを送信する必要があるときに再起動する必要があります。あなたの説明に基づいて、それは多くのリソースを必要とするようには聞こえませんので、私はちょうどそれをインストールし、それを実行させるように勧め、電子メールを送信するために月に一度発射します。

0

これは私が似たような状況で行ったことです。

Windowsサービスは24時間365日稼働し、作業単位を処理します。データベースビューを介して作業単位を取得します。

テーブルのメッセージ
  ProcessingStartTime
  CompletionDTE
  ...

データベースビューはレコードのみが、完了とマークされていますし、過去にProcessingStartTimeを持って引っ張ります。したがって、サービスはトランザクションを確認した後、データベースレコードを更新するストアドプロシージャを実行します。このシステムでは、エンドユーザーのアップロードファイルをasp.net webfromにアップロードし、asp.net webfromをデータベースにインポートします。

関連する問題