none
スタートアップとサービスの起動順序について

    質問

  • ①エンジン機能を持つアプリケーション

    ②そのエンジンを利用しているアプリケーション

    の自動起動の順序を制御したいと思っております。(①⇒②の順)

    現在、①については管理ツールの「サービス」一覧に登録されているのですが

    ②についてはサービス登録されていないため

    「スタートメニュー」-「プログラム」-「スタートアップ」にショートカットを置いて

    自動起動をおこなっております。

    そこで質問なのですが

    ◆質問1

    WindowsServer2008R2 では通常、「サービス登録されているアプリケーション」

     と「スタートアップに登録されているアプリケーション」どちらの起動順序が優先されるのでしょうか。

    ◆質問2

    サービス登録されている物の間で依存関係を設定(レジストリ編集)することで

    起動順序を設定することはできる、とネット上で一部見かけたのですが

    上記のように、「サービス」一覧に登録されているアプリケーションと

    「スタートアップ」に登録されているアプリケーションの起動順序をスクリプトなどを用いずに

    標準機能で制御することは不可能なのでしょうか。

    以上、恐れ入りますがなんらかのアドバイスが頂ければ幸いです。


    2012年6月7日 9:54

回答

  • まずコンピューター起動時に、登録されているサービスが起動します。
    次にユーザーがログオンすると、レジストリのRunOnceやRunエントリに登録されているプログラムが実行され、
    その後、スタートアップフォルダに登録されているプログラムが実行されるという感じだと思います。

    ただし、同期実行されるものもありますが、非同期で実行されるのもがありますので実際には重複して実行されるものも多くあると思います。


    質問2については、アプリがそういう作りになっていない限りは、スクリプトなどで制御するしかないように思います。
    2012年6月7日 11:48
    モデレータ
  • サービスのロード順序を制御する方法として、OS標準コマンドとして
    SCコマンドがあります。

    今回のケースですと、②のアプリケーションをサービスとして作成し、
    ①と②に依存関係をもたせることができると思います。

    SC create [サービス名] binPath= "C:\Program Files\APP\APP.exe"
    SC config [サービス名] depend= [依存するサービス]

    また、制御が厳密でなくてもいいのであれば、②のアプリをサービスとして
    登録したあと、依存関係を持たせずに、自動(遅延開始)で開始することで、
    2分後に起動することもできるとおもいます。

    2012年6月8日 9:19

すべての返信

  • まずコンピューター起動時に、登録されているサービスが起動します。
    次にユーザーがログオンすると、レジストリのRunOnceやRunエントリに登録されているプログラムが実行され、
    その後、スタートアップフォルダに登録されているプログラムが実行されるという感じだと思います。

    ただし、同期実行されるものもありますが、非同期で実行されるのもがありますので実際には重複して実行されるものも多くあると思います。


    質問2については、アプリがそういう作りになっていない限りは、スクリプトなどで制御するしかないように思います。
    2012年6月7日 11:48
    モデレータ
  • サービスのロード順序を制御する方法として、OS標準コマンドとして
    SCコマンドがあります。

    今回のケースですと、②のアプリケーションをサービスとして作成し、
    ①と②に依存関係をもたせることができると思います。

    SC create [サービス名] binPath= "C:\Program Files\APP\APP.exe"
    SC config [サービス名] depend= [依存するサービス]

    また、制御が厳密でなくてもいいのであれば、②のアプリをサービスとして
    登録したあと、依存関係を持たせずに、自動(遅延開始)で開始することで、
    2分後に起動することもできるとおもいます。

    2012年6月8日 9:19
  • アプリケーション側で、サービスが SERVICE_RUNNING でなければ StartService して、SERVICE_RUNNING になるのを待つべきでしょう。
    2012年6月10日 1:09
  • すでに他の方がお答えされていますが、自動起動されるサービスとスタートアッププログラムを見つける方法や停止させる方法は(例えば)したのページにあります。、
    http://mikasaphp.net/win7p2.html
    Web検索すればそのようなフリーソフトもあるかもしれませんが、MSではしたのツールもあるようです。
    http://technet.microsoft.com/ja-jp/sysinternals/bb963902.aspx

    (例えば)したのページはWindows 7についてですが、スタートアップではなくタスクスケジューラに登録されているものが多いのではないかと思います。
    http://blog.cles.jp/item/3537


    試験問題作成委員会(http://shikenmondai.blog.shinobi.jp/)

    2012年6月10日 1:34
  • 皆様色々と方法を教えていただき、有難う御座います。

    t otani さんの方法で、制御できそうだったのですが

    ②のアプリ起動でデスクトップにウィンドウが表示されず

    サービスの「ログオン」タブで「デスクトップとの対話を許可」に設定しても、無理でした。

    OMEGATさんのご回答の通りサービス登録されているものについては一番最初に起動されるようですので

    デスクトップログオンした後に時間を少しおいてから②のアプリを起動する

    というvbsをスタートアップ登録する事に致します。

    有難う御座いました。

    2012年6月12日 5:15