none
scコマンドでのサービス登録方法 RRS feed

  • 質問

  • お世話になります。

    Windows2008サーバで、VBで作成したexeをサービス起動させようとしています。

    現在、scコマンドを使用して、サービス登録していますが、サービスとして実行させることができません。

    2003サーバまではリソースキットを使用して登録すれば、サービスとして稼動させることができましたが

    2008からは何か制約があるのでしょうか。

    状況としては、Windowsサービスとしては正常に登録され、手動・自動ともにサービスが起動できない状態です。

    単体テストが進まず困っている状況です。

    よろしくお願い致します。

    2011年8月23日 6:41

すべての返信

  • サービスが開始できないならイベントビューアとかになにか出ているのではないでしょうか。
    また、そのEXEってWin2008上でサービスじゃなかったら動くのでしょうか。
    サービスを動かすユーザ権限などは大丈夫でしょうか。
    2011年8月23日 8:07
  • お世話になります。

    >サービスが開始できないならイベントビューアとかになにか出ているのではないでしょうか。

    サービスが起動できなかったメッセージのみ出ていました。

    >そのEXEってWin2008上でサービスじゃなかったら動くのでしょうか。

    VB単体では動きます。

    また、2003のリソースキットを使用してサービス登録した場合もサービスとして動きます。

    >サービスを動かすユーザ権限などは大丈夫でしょうか。

    Administratorで実行しています。

    すみませんが、よろしくお願いします。

    2011年8月23日 8:13
  • >Windows2008サーバで、VBで作成したexeをサービス起動させようとしています。

    Windows Server 2008 R2 でなく、Windows Server 2008 ですか?

    >2003サーバまではリソースキットを使用して登録すれば、サービスとして稼動させることができましたが

    Windows Server 2003 は、32bit 版ですか?

    Windows Server 2008 は、32bit 版ですか?

     

    2011年8月23日 13:42
  • 渋木さま

    お世話になります。

     

    >Windows Server 2008 R2 でなく、Windows Server 2008 ですか?

    R2ではありません。ただの2008です。

    >Windows Server 2003 は、32bit 版ですか?

    32bit版です。

    >Windows Server 2008 は、32bit 版ですか?

    32bit版です。

    よろしくお願いします。

    2011年8月24日 2:16
  • Windows サービス絡みで Windows Server 2003 と Windows Server 2008 との違いだと、Session 0 分離か UAC 絡みが疑わしいように思います。
    次のような手順で切り分けられるのではないかと思います。

    Session 0 分離の可能性:
    ・Windows Server 2003 の端末上でログオンして、サービスを起動&終了 (これはできているようですね。)
    ・ログオンした状態のまま、同じ端末上で別のユーザーでログオンする。(別のログオン セッションを立ち上げる。)
    ・最初にログオンしていたユーザーはログオフする。
    ・あとからログオンしたユーザーのセッションで、サービスを起動&終了してみる。
    => Windows Server 2008 の Session 0 分離を疑似的に実現できるはずなので、これで実行できなかったら Session 0 分離の影響です。

    セッション 0 の分離 - Windows 7 対応アプリケーションの互換性
    http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx

    UAC の可能性:
    ・Windows Server 2008 の端末上でログオンして、サービスを単体のアプリケーションとして実行してみる。(これはできているようですね。)
    ・次に同じ端末に別のユーザー(同じ権限を持つ人)でログオンする。(元のユーザーはログオフしても構わないと思います。)
    ・同じくサービスを単体のアプリケーションとして実行してみる。
    => VB アプリのインストールが正しくない可能性が高いです。VB アプリのインストールを管理者として実行していないために、必要なコンポーネントやレジストリが仮想化されてしまっているとか。

    ユーザー アカウント制御 (UAC: User Account Control) - Windows 7 対応アプリケーションの互換性
    http://msdn.microsoft.com/ja-jp/windows/dd883236.aspx
    • 回答の候補に設定 山本春海 2011年9月2日 4:52
    2011年8月24日 6:38
  • totojo様

    お世話になっております。

    まず、Session 0 分離の可能性について確認してみました。

    結果は、別ユーザでサービスを起動したところ、「アクセス拒否エラー」が発生し、起動はできませんでした。

    実行の種類を「自動」、サービスの起動ユーザを「Localsystem」からサービスを起動したユーザに変更してみましたが、

    こちらも失敗でした。

    URLにあるようにレジストリ登録等の対応が必要ということでしょうか。

    UACについてですが、もともと無効化されています。

    よろしくお願い致します。

    2011年8月24日 7:55
  • 「アクセス拒否エラー」が発生したかどうかの覚えがないですが、Session 0 分離のパターンにはまってしまったのなら、大人しくアプリケーションをつくりかえるか、
    あるいは Run レジストリに登録するなどして、端末へのログオン時にスタートアップ起動するとかしかないと思います。
    (スタートアップ起動は端末にログオンしないと起動しないので、この点はご注意)
    2011年8月24日 9:34
  • 単体テストが進まず困っている状況です。

    とりあえずそういう次元でなく、場合によっては設計し直しも必要なのですが。

    「アクセス拒否エラー」とのことですが、きちんとエラー処理をして、何のAPIを呼び出したときに何のエラーが出たのかを確認すべきです。
    当該コードをこのフォーラムに張り付ければ、何が原因か、サービスでは実行できない、回避策等、回答がもらえるはずです。

    2011年8月24日 12:17
  • totojo様

    お世話になっております。

    こちらの事情ですが、設計やり直しも作り変えもできない事情がありますので、

    回避策としてスタートアップ案も検討中です。

    Session0にはまったかどうかはもう少し調査したいと思います。

    ありがとうございました。

     

     

    2011年8月25日 1:45
  • チャブーンです。

    この件ですが、内容にこだわらず回避したいということなら、ひとまずsrvany.exeを使って、プログラムをサービス化するという方法もあるでしょう。srvany.exeは2003リソキのツールですが、2008 (R2)でも使うことができるようです。検索をかけると実際の検証例もありますし、私の方で簡単に検証したところ(2008 R2ですが)、動作はしましたよ。もちろんMSのサポート外の対応方法なので、自己責任でお願いします。

    2011年8月29日 4:35