2011-07-19 11 views
1

私は非常にWindowsサービスに慣れています。 dbを夜間に更新するアプリケーションを作成しようとしています。ナイトリーアップデートDB with Windowsサービス

は、私はすでに

(更新自体のために)動作するコードを持っているが、私はサービス内でそれをコーディングする方法を見つけ出すことはできません。

Protected Overrides Sub OnStart(ByVal args() As String) 
    ' Add code here to start your service. This method should set things 
    ' in motion so your service can do its work. 

    Dim timerDelegate As New TimerCallback(UpdateDB) 
    serviceTimer = New Timer(timerDelegate, Nothing, 0, 20000) 

End Sub 

Protected Overrides Sub OnStop() 
    ' Add code here to perform any tear-down necessary to stop your service. 
End Sub 

私が理解している限り、上記のコードは20秒間、正しく実行されますか?どのように私はそれが1日1回だけ実行するようにコード化することができます...と言ってみましょう深夜。

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

ウェブサービスを使用する必要がありますか?それをスケジュールすることはできますか?

+0

Windowsのサービスルートを放棄し、ウィンドウのタスクスケジューリングサービスを使用してスケジュールするコンソールアプリケーションを作成するだけで、人生は10倍も簡単になると言います。私はあなたのコードが動作していると言うことを知っているが、ファンキーなことが起こり、それをデバッグする必要がある1年のうちに、コンソールアプリケーションのデバッグが簡単になることがわかる。さらに、サービスがタイマーにハードコードされている(または設定ファイルからタイマーが読み込まれている)間に、いつでもコンソールアプリケーションを手動で実行できます。 –

+0

ありがとうございます。私はまだそれほど遠くないからです。私は今それを試してみます。 Windowsコンソールアプリケーション、そうですか? –

+0

幸運! Windowsサービスを作成するのはかなり簡単で、さらに簡単なオープンソースフレームワークもありますが、私は一般的に、常に稼働している必要があるプログラムや機械条件の変更に対応する必要のあるプログラムのみを推奨します。 –

答えて

2

Windowsサービスを使用する必要がありますか?

コンソールアプリケーションを作成し、Windowsスケジューラを使用して起動するのが簡単な方法です。

Windowsサービスはインストールとデバッグに苦労する可能性があるため、絶対に必要な場合にのみ使用します。

+0

ありがとうございます!私は今それを試してみるでしょう。 –

+0

それは完璧に働いていて、私は期待していました!ありがとうございました! –

+0

@xrum - 問題ありません:) –

0

可能な解決策は、1000msの間隔で実際の深夜にする必要があるかどうかに応じてタイマーを実行することです。明らかに、間隔が狭ければ近いほど、真夜中に近づくでしょう。

タイマー内で発生するアクティビティが少なくなるように、実行のしきい値が真夜中から+5分になるようにするには、これを5分ごとに増やすことができます。

タイマーが起動するたびに、イベントを発生させようとしている時間(この場合は深夜)と現在の時刻を比較します。

現在時刻が午前0時であるか、または午前0時に定義されたしきい値内であれば、コードを実行します。