私は、さまざまな Windows サービスがプライベート ネットワーク内のさまざまなコンピューターで実行されるシステムに取り組んでいます。ネットワーク内のどのコンピューターでも、これらのサービスとリモートで対話するクライアント アプリケーションを実行できます。パッケージの一部として、ユーザーがネットワーク内のサービスに問題が発生しているかどうかを確認し、ダウンしているサービスを再起動できる機能があります。
これを機能させるために、ユーザーの偽装とService Controller クラスを使用しました。ダウンしたサービスをホストしているコンピューターの管理者アカウントのユーザー名とパスワードをユーザーに提供し、その管理者になりすまして、ServiceController でサービスを再起動するようユーザーに求めます。これはほとんどの状況で機能しますが、一部のサーバーでは管理者になりすますことができません。私の理解では、ユーザーの偽装が機能するには、偽装されるアカウントがローカル マシンまたは Active Directory グループの一部にある必要がありますが、問題のサーバーにはローカルのアカウントしかありません。
LogonUser
偽装を開始するメソッドには多くのパラメーターがあることに気付き、それらのパラメーターのいずれかが私の問題を解決するかどうかを確認するためにそれらを試し始めました。LogonType の値を "New Credentials" (9) に設定しようとしたところ、奇妙な (しかし役立つ可能性がある) 動作が見られました。
- 以前は使用できなかったサーバーでサービスを再起動できます
- ダウンしたサービスを再起動しようとして間違ったパスワードを入力しても、サービスは再起動されます。
この動作が見られるのはなぜですか? この理由が正しければ、この設定を使用して、ユーザーにログインを求めることを完全になくすことができます。