- PR -

Windowsサービスの停止制限について

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2007-01-09 00:21
VB.NETにて作ったWindowsサービスにて「停止」を実行した際にパスワード入力にてサービスの停止制限を行いたいと思っています。
OnStopメソッドにてパスワード不一致場合にThrowを発生させると、サービスコントロールマネージャ上は「停止処理中」のままその後「停止」できない状態になります。
ちなみに、CanStopプロパティをFalseに設定した場合、停止させる場合は再起動させるしかないため使えませんでした。せめて自サービスで停止処理ができればいいんですけど自分自身でEndしてしまうと、イベントログにエラーが書き込まれました。
あとポリシーにて制限させる方法も考えましたが、使用するユーザーにてAdministrator権限がある場合は意味がないので・・・

自サービス停止をキャンセルさせる方法はないでしょうか?

WindowsXP Pro SP2
VisualStudio.NET 2003 Framework1.1 SP1
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-01-09 08:13
Administrator にまで制限を課すような事は好ましくないし、無理ぽいと思います。

元々、ここで必要とされているような制限を実現するために設けられた仕組みがOSのアカウント管理ですし。

管理者もサービスを停止できないようにしてしまって、シャットダウンの時はどうするんですか?

OSがサービスを強制停止するまで居座ることになっちゃいませんか?
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2007-01-09 09:13
引用:
Administrator にまで制限を課すような事は好ましくないし、無理ぽいと思います。


確かにその通りなんですが、セキュリティ上の操作ログを取っているサービスで止められるとちょっと問題があり、社内で社員に割り当てているパソコンなので各自のパソコンは各自で管理者という扱いになっています。運用上の問題でもあるとは思うのですが、台数等もかなりあり簡単にはいかない状態です。

引用:
シャットダウンの時はどうするんですか?


シャットダウン時はOnShutdownメソッドにて処理を記述するので、ユーザーが意図的に停止としたときだけにこの仕組みを実装しようと考えていました。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-01-09 09:51
どうしてもと言うなら・・・・

CanStopプロパティをFalseに設定。サービスに処理の本体を持たせずに、サービスから起動する別プロセスに処理の本体を持たせるようにする。停止処理はサービスから行うのではなく、専用のアプリケーションからプロセス間通信でサービスから起動した別プロセスを終了させる。サービス上は動作中のままだけど、実質的には停止しているのだから要件は満たせるよね。

ただし、サービスの停止に限らず、プロセスを強制終了させるとか回避手段はいくらでもあるので、本質的な解決にはなりませんよ。ユーザーにAdministrator権限を与えない事を考えるか、ユーザーがサービスを任意に停止出来ることを前提としてシステムを設計するかしたほうが良いでしょう。

[ メッセージ編集済み 編集者: 甕星 編集日時 2007-01-09 09:59 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-09 21:45
 普段から、Administrators グループのアカウントを使用していることが問題のような。
 Vista でも、Users グループのアカウントを使用するようにしましょう。
(開発環境で、デバッグに、ちと問題がでる場合があるけど)
_________________
1

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