- 締切済み
Windowsサービスを別のサービスに依存させるには?
OracleにアクセスするWindowsサービスプログラムを作ったのですが、Windowsの起動時にOracleインスタンスが起動する前に自作サービスが起動してDB接続エラーとなってしまします。 次の条件の元で、これを解決するにはどうしたらよいでしょうか。(Oracleに限った話ではないと思います) 1.自作サービスを書き換えたくない 2.管理ツールの「サービス」画面で、自作サービスの起動を「自動」にしたい。 3.環境はWindows Server 2003, Oracle Database 9i, 10g
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- deadline
- ベストアンサー率63% (1239/1943)
回答No.2
ANo.#1の回答欄のURLに余計なゴミが付いてしまいました。参考URL欄のURLが正しいものです。
- deadline
- ベストアンサー率63% (1239/1943)
回答No.1
サービスの依存関係の設定は、レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\サービス名 (←この場合だと、自作サービス名) DependOnService REG_EXPAND_SZ 依存させるサービス名 (←Oracleのレジストリに登録されているサービス名) を設定するだけです。詳しくは下記参考URLをご覧ください。 『MONYO-COM: たかはしもとのぶの個人ページ Windows起動時に読み込むサービスの順序を制御したい』 http://www.monyo.com/technical/windows/33.html
補足
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インスタンスサービスを手動で開始するとエラーが発生することがあるので、設定方法が違っているのかもしれません。