こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Windowsサービスを別のサービスに依存させるには?

OracleにアクセスするWindowsサービスプログラムを作ったのですが、Windowsの起動時にOracleインスタンスが起動する前に自作サービスが起動してDB接続エラーとなってしまします。
次の条件の元で、これを解決するにはどうしたらよいでしょうか。(Oracleに限った話ではないと思います)

1.自作サービスを書き換えたくない
2.管理ツールの「サービス」画面で、自作サービスの起動を「自動」にしたい。
3.環境はWindows Server 2003, Oracle Database 9i, 10g

投稿日時 - 2006-03-31 17:35:50

QNo.2063482

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ANo.#1の回答欄のURLに余計なゴミが付いてしまいました。参考URL欄のURLが正しいものです。

投稿日時 - 2006-03-31 18:00:00

ANo.1

サービスの依存関係の設定は、レジストリの

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\サービス名 (←この場合だと、自作サービス名)
DependOnService   REG_EXPAND_SZ   依存させるサービス名  (←Oracleのレジストリに登録されているサービス名)

を設定するだけです。詳しくは下記参考URLをご覧ください。

『MONYO-COM: たかはしもとのぶの個人ページ
 Windows起動時に読み込むサービスの順序を制御したい』
http://www.monyo.com/technical/windows/33.html

参考URL:http://www.monyo.com/technical/windows/33.html

投稿日時 - 2006-03-31 17:53:13

補足

deadlineさん 早速の回答ありがとうございます。

「自作サービスをOracleインスタンスサービスに依存するさせる」
ことはやってみました。参照URLの方法ではないですが、scコマンドで
> sc config [SERVICE_NAME] depend= [DEPEND_SERVICE]
のようにしました。
レジストリを見ると、参照URLと同じ設定になっていました。

これによって、手動でサービスを開始・停止したときに依存するようになりましたが、問題は相変わらすです。

そもそもOracleインスタンスサービスを手動で開始すると、次のエラーが発生することがあります。
「ローカル コンピュータ の [サービス名] サービスを開始できません。
 サービスはエラーを返しませんでした。Windows の内部エラーまたはサービスの内部エラーであった可能性があります。」
しかしその後DBは正常に起動します。
つまり、サービスの開始にはタイムアウトがあって、タイムアウト直後に自作サービスが起動してるから状況はかわらないのではないかと見ています。

そこでレジストリでタイムアウト値を次のように変えてみました。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicesPipeTimeout=3000000(5分)
これでも問題は相変わらす発生します。
この設定をしてもOracleインスタンスサービスを手動で開始するとエラーが発生することがあるので、設定方法が違っているのかもしれません。

投稿日時 - 2006-03-31 18:06:01

あなたにオススメの質問