Visual C++ 2008 MFCです。
DBなどのサービスを使用するGUIアプリケーションを
スタートアップに登録させている場合、サービス開始前に起動してしまい、
正しく動作しなくなる可能性があります。
サービス同士は依存関係を持たせることができるようですが、
このようなGUIアプリケーションをスタートアップに入れる場合、
サービス開始まで待たせる方法はあるのでしょうか?
私はスタートアップのショートカットにコマンドラインオプションを付与し、サービス
が起動していなければ何度かリトライするモードを組み込んでます。
ここらへんが役に立つかも?
http://www.monyo.com/technical/windows/33.html
スタートアップスクリプトにするか、依存関係を
SpoolerかMessangerにするといいみたいです。
すみません
サービスを使用するアプリでしたね。
無視してください。
僕だったら、
・APIは、自動的に起動する。
・フラグ、レジストリー等でサービスプログラムの起動を確認。
・起動が確認できたら、処理を継続。
・一定時間を超えてもサービスプログラムが起動しなければエラー終了。
(原因が分かるとなお良い)
にしますね。
DB などっていうことは、相手は自作のサービスではなく、例えば SQL Server サービス
だったりするのでしょうか。
つまりは、サービス側に同期機構を組み込むための改変ができないケース。
サービスが立ち上がったかどうかは QueryServiceStatusEx 関数で調べることができま
すが、ステータスが RUNNING ならば、SQL クエリが確実に成功する保証があるのでしょ
うか? 若干不安です。
ARさん、えーとさん、ITOさん、aetosさん、解説ありがとうございます。
今回の件では、相手サービスはまさにSQL Serverです。
OS自身の機能では、サービス起動を待つような仕組みは無いのですね。
アプリケーション自身で一定時間待ちながら状態を調べるような処理を
組み込むようにしてみようかと思います。
ありがとうございます。