サービスの起動中を制御したい

解決


おへ君  2010-02-05 15:23:13  No: 37458  IP: 192.*.*.*

TServiceを利用しサービスプログラムを作成したのですが、他のサービスで先に起動して欲しい物(データーベース)があり、色々調べたのですが上手くできません。「レジストリに依存関係を記述する」や「起動時に稼働するタスクを実行させる」等の方法では他の第三者の作業により設定が変更されてしまう可能性がありますし、インストール時にも手間がかかります。
そこで、依存関係設定をプログラム本体に組み込むにはどうしたらいいのでしょうか。(出来るのでしょうか?)
よろしくお願いします。

編集 削除
おへ君  2010-02-05 15:28:59  No: 37459  IP: 192.*.*.*

タイトル訂正、「サービスの起動順を制御したい」の誤りです。

追加情報
WindowsXP SP3
Delphi5

編集 削除
ttt  2010-02-05 16:21:05  No: 37460  IP: 192.*.*.*

すでに試したのかもしれませんけど、サービスの中から
自分で目的のサービスを起動してやるのでは駄目なんでしょうか?
サービスの初期化中はStartServiceできない(自分自身が
起動状態になるまで待たないといけない)点に注意がいりますけど。

編集 削除
おへ君  2010-02-09 10:06:07  No: 37461  IP: 192.*.*.*

tttさん、早速のご回答ありがとうございます。
先に起動完了していて欲しいのは、インストール済みのデータベースのため他への影響を考えると、DB起動完了後にこちらのサービスを起動したいと思います。
こちらのサービスが起動せずとも他の作業でデータベースは使いたいですから。

編集 削除
ttt  2010-02-09 17:50:47  No: 37462  IP: 192.*.*.*

> こちらのサービスが起動せずとも他の作業でデータベースは使いたいですから。
いや当然「目的のサービスが起動していなかったら」自分で起動するという前提条件が付きます。

サービスのOnExecuteで
・データベースのサービスが起動しているか、QueryServiceStatusで問い合わせ
・もし起動していなかったらStartServiceで起動をかけ、Runningになるまで待つ
・その後、本来のOnExecuteの処理を実行
とすれば、DBが起動した後に自分のサービスが処理開始することにならないでしょうか。
それともOnStartの時点でDBが起動していないと駄目?

編集 削除
おへ君  2010-02-10 08:29:13  No: 37463  IP: 192.*.*.*

なるほど!『目から鱗の…』のアドバイス。
ありがとうございます、早速プログラム修正をしてみます。
結果は後ほど。

編集 削除
おへ君  2010-02-10 12:04:39  No: 37464  IP: 192.*.*.*

tttさん、おかげさまで解決しました。

少々アドバイスとは違いますが、
1.OnStartイベントはDB起動待ち合わせタイマーを起動し終了。
2.DB起動待ち合わせタイマーイベント内で起動確認、Runningならば自身のタイマー停止後、サービス処理実行(DBアクセスなどの処理開始)、Running以外ならば待ち合わせ。
※DBサービスの起動はシステムに任せる(既存設定:自動起動のまま)ことにし解決しました。

tttさん、改めてアドバイスありがとうございました。

編集 削除