- PR -

Windowsサービスの「スタートアップの種類」を変更するには

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2005-06-03 16:18
.NETにてサービスを作成し、インストーラでは「無効」の状態でインストールさせ設定ウィ
ザードにて設定後、そのウィザードによりサービスのスタートアップを「自動」に変更したので
すが、その方法がみつかりません。

サービスインストール後にプログラムより「開始」「停止」はできるのですが、「自動」「無
効」のスタートアップの変更はできないのでしょうか?

わかられるかたご教授願います。

VB.NET 2003
Windows2000 Pro SP4
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-03 16:41
引用:

サービスインストール後にプログラムより「開始」「停止」はできるのですが、「自動」「無
効」のスタートアップの変更はできないのでしょうか?



標準クラスライブラリを使う限り、サービスのインストール時には起動状態を設定できるようえすが、インストール後にこれを変更することはできないようです。

該当するレジストリ設定を直接変更してください。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2005-06-03 16:59
渋木宏明さん返信ありがとうございます。

引用:
該当するレジストリ設定を直接変更してください



最初はその方法を考えていたのですが、レジストリの値を変更し管理ツールのサービスでも表示
が「無効」から「自動」に変わるのですが、いざ実行を行うと「指定されたサービスは無効であ
るか、または有効なデバイスが関連付けられていないため、開始できません」と表示され開始で
きません。

再起動すれば起動するようになるのですが、サービスマネージャがその辺の値を保持しているん
でしょうね。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-03 17:31
引用:

再起動すれば起動するようになるのですが、サービスマネージャがその辺の値を保持しているん
でしょうね。



そんなことは無いはずです。
レジストリエディタで、起動状態だけを書き換えた場合はどうなりますか?

「.NET でサービスを作った場合」に何か特別な条件付けがある可能性は否定できませんが、少なくとも SCM のレベルではそんな細かいところまでは記憶していません。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2005-06-03 17:48
引用:
レジストリエディタで、起動状態だけを書き換えた場合はどうなりますか?



最初、確認のために行ったときがレジストリエディタで書き換え行った結果がエラーでした。

手順は以下の通りです。(Messangerサービスで確認)

1.管理ツールのサービスでスタートアップの種類を「自動」から「無効」に設定
2.レジストリエディタにてStartキーが「2」→「4」に変更されたことを確認
3.レジストリエディタにてStartキーを「4」→「2」に変更
4.管理ツールのサービスでスタートアップの種類が「無効」から「自動」変更されたことを確認
5.管理ツールのサービスで「開始」を実行 → エラー

一旦、管理ツールのサービスで「無効」に設定し、再度「自動」に変更すれば、開始するようになりました

ちなみに変更しているレジストリはHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Messenger内のStartキーを変更しました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-03 18:18
引用:

最初、確認のために行ったときがレジストリエディタで書き換え行った結果がエラーでした。



手元の環境で確認しました。

Windows XP SP2 ではエラーになりましたが、Windows 2000 ではエラーになりませんでした。

これって XP 辺りからの変更なのかな?

とすると、レジストリの書き換えではまずいですね。

WMI 経由か、最悪、SCM な API を使うしかなさそうです。

WMI の Win32_Service クラスに ChangeStartMode() メソッドがあるので、これを試してみてはどうでしょう?


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2005-06-03 18:27
引用:
WMI 経由か、最悪、SCM な API を使うしかなさそうです。



やはりそこにいくしかなさそうですね。
ただ、今さらながらNTにもインストールを考えているのですが、NTはWMIが標準インストールではないので難しいかな。。。
ということで、APIをあたってみます。

いろいろありがとうございました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-03 19:38
引用:

ただ、今さらながらNTにもインストールを考えているのですが、NTはWMIが標準インストールではないので難しいかな。。。



.NET のランタイムインストール時に Enable されたりしないんですかね?>WMI

P/INVOKE.NET に、SCM 系の定義もいくらかあるようです。

http://www.pinvoke.net/default.aspx/advapi32.OpenSCManager

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
1

スキルアップ/キャリアアップ(JOB@IT)