Windows Server 2012 にログインするときにユーザーの「シェル」の代わりとして実行される小さな C# (.NET 4) アプリケーションを作成しています。自分のローカルアカウントのパスワード。
次のコードを使用して..
DirectoryEntry directory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry userEntry = directory.Children.Find(username);
userEntry.Invoke("SetPassword", new object[] { newPassword });
userEntry.CommitChanges();
...コードが昇格したコマンドプロンプトから起動された場合、正常に動作します。ただし、シェルの置き換えは「通常の」アプリケーションとして実行されるため、
アクセスが拒否されました
ユーザーがローカル管理者として設定されている場合でも、コードの実行時に例外が発生します。
昇格せずにユーザー自身のローカルアカウントパスワードをプログラムで設定するために使用できるコードまたはメカニズムはありますか? または(そして、これはおそらくServerFaultの質問であることを認識しています:) UACを無効にすることなく、昇格したプロセスとして「置換シェル」を実行する方法はありますか?