Core Reason の別の提案:
メッセージ キューまたは同様の概念を使用して、サービスに関する情報をシャトルし、異なるセキュリティ コンテキスト間を行き来して開始/停止します。ASP.NET でそれらをハードワイヤするのではありません。
例えば、
ASP.NET の非管理者アカウントで、停止または開始するサービスに関する情報を含む値をファイルまたはレジストリ (ある種のログ) に書き込みます。
真の管理者として実行されているコントローラー サービスは、書き込まれたデータの場所をポーリングし、情報を確認すると、それらのコマンドに従って適切なサービスを開始および停止します。
セキュリティ ハックの代わりに、または UAC を完全に無効にする代わりに、回避策を使用して問題を回避します。
監視の更新:
- 上記と同じ考え方ですが、多少逆になっています。システムで実行されるこのシナリオのメイン/コントローラー サービスは、ログ ファイルに書き込みます。他のサービスについて書いているサービスです。
- Web ページに自動更新を配置します。Web ページが更新されるたびに、変更のログ (停止または開始されたサービスに関する情報) が監視されます (変更検出のために独自のスクラッチ ファイルを保持できます)。更新は、META Refresh タグ、またはサーバーへの AJAX コールバック (より微妙) である可能性があります。
- Web ページは以前と同様に指示を発行します。
問題は、そのメイン/コントローラー サービスが停止し、何も報告されない場合です (ログ/メッセージが渡されなくなります)。可能であれば、その 1 つのサービスに特別なケースを作成します。Windows が停止した場合は再起動するか、そのサービスを開始できない場合はマシンを再起動するように Windows に指示します...
.. ところで、Web ページ モニターを使用する代わりに、サービスを自動的に監視し、障害時にサービスを再起動する Windows ツールを検討しましたか、それとも要件に適していませんか?