- PR -

指定時刻にサービスを起動する

1
投稿者投稿内容
ぴぃ子
常連さん
会議室デビュー日: 2008/02/21
投稿数: 34
投稿日時: 2008-02-25 00:32
こんにちは。

現在、VB2005で開発をしています。

今回、1日1回処理を行うサービスを作成しようと考えています。
色々と資料を探しては見たのですが、「指定時間に起動する」という
手段が見つかりません。

Timerなどで、時間をチェックする手段ではなく
「指定時間に」という手段があればと思い、質問させて頂きました。

どうぞよろしくお願い致します。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-02-25 01:36
Service を起動するんですから、当然その対象の service application 以外のものから制御しなければいけないでしょう。例えば task scheduler とかで。

ただ、service を起動する処理もそれなりに時間がかかるものですから、厳密に時刻を指定してとなると事前に service を起動しておき、 service application 側で時刻を判定するような感じにした方がいいんじゃないかと。
_________________
ぴぃ子
常連さん
会議室デビュー日: 2008/02/21
投稿数: 34
投稿日時: 2008-02-25 13:07
返答ありがとうございます。

質問の方法が悪かったですね。

サービスはサーバー起動時に自動で開始するようにして
VB側で指定時刻にのみ上がる様なイベント等設定できないのかな?と思ったので。

>service application 側で時刻を判定するような感じにした方
これだとやはりTimerなどで間隔をとって判断するしか方法が思いつかないので…。

もう少し調べて、無理そうであればタスクスケジューラーかサービスで時刻判定かで
処理したいと思います。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-02-25 14:28
動的にスケジューラーに登録できないかと検索してみたのですが

結果は
1)atコマンドで登録する
2)ITask COM オブジェクトで登録する
3)Vista以降であればITaskScheduler2.0で登録する

で指定時間にワンショットで登録するのはダメでしょうか

参考になればと思います。



くれそん
会議室デビュー日: 2008/02/25
投稿数: 2
投稿日時: 2008-02-25 22:02
こんにちは。

VC++にてTimerで以下のようにして指定時刻にTickイベントを拾えました。VBでも同じことが出来ないでしょうか?

TimeSpan ts = DateTime:: Parse("2008/02/25 22:00:00") - DateTime::Now;
this->timer1->Interval = static_cast<int>(ts.TotalMilliseconds);
this->timer1->Enabled = true;
ぴぃ子
常連さん
会議室デビュー日: 2008/02/21
投稿数: 34
投稿日時: 2008-02-25 22:57
indigo-xさま、くれそんさま

ご返答ありがとうございます。

>動的にタスクスケジューラー
これは思いつきませんでした。

>VC++にて…
 指定時間から起動時間を差し引いてTimerを起動するということですよね?
 これでしたら、VBでも可能かと思います。
 ただ、サーバ側が1日1回シャットダウンをしないとこのままでは
 ちょっと用件を満たせないような…。

色々と視野が広がるご意見、ありがたいです。
くれそん
会議室デビュー日: 2008/02/25
投稿数: 2
投稿日時: 2008-02-26 09:34
立ち上げっ放しであれば、初回Tickイベントのタイミングが決定したあとは、24時間周期というTimer本来の使い方ができます。
具体的にはTickイベント処理の冒頭で以下のようなコードを入れておけばよいかと。

static bool first = true;
if (first) {
this->timer1->Interval = (24 * 60 * 60 * 1000);
first = false;
}

> 指定時間から起動時間を差し引いてTimerを起動するということですよね?
> これでしたら、VBでも可能かと思います。
> ただ、サーバ側が1日1回シャットダウンをしないとこのままでは
> ちょっと用件を満たせないような…。

1

スキルアップ/キャリアアップ(JOB@IT)