WMIオブジェクトの2つのメソッドを呼び出すために、昇格して実行する必要があるプログラムを作成しました。管理者グループのユーザーが「昇格モード」で実行すると、魅力のように機能します。しかし、今の問題は、すべての人が実行する必要があり、すべての人が作業するマシンの管理者権限を持っているわけではないということです。そこで、「Domain Admins」グループのユーザーになりすまして、プログラム自体を再起動させることにしました。
そのための私のコードは次のとおりです。
ProcessStartInfo proc = new ProcessStartInfo();
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = System.Windows.Forms.Application.ExecutablePath; ;
proc.UserName = "USERNAME";
SecureString secure = new SecureString();
foreach (var item in "PASSWORD")
{
secure.AppendChar(item);
}
proc.Password = secure;
proc.Domain = "DOMAIN";
proc.UseShellExecute = false;
proc.Verb = "runas";
Process.Start(proc);
UACが有効になっている場合、これには2つの問題があります。まず、プログラムのインストールフォルダーのACLに偽装する必要のあるユーザーを明示的に追加しない場合(ユーザーは、フォルダーとそれに含まれるすべてのファイルへのフルアクセス権を持つAdministratorsグループに既に存在します)、をスローしSystem.ComponentModel.Win32Exception: The directory name is invalid
ます。ディレクトリパスを再確認しましたが、実際には有効です(ユーザーがACLに明示的に含まれている場合に機能します)。
これで、ユーザーが明示的に追加され、例外がない場合、プログラムはユーザーとして実行されますが、昇格された権限では実行されないため、呼び出しは機能しません。
私は何が間違っているのですか?ご協力いただきありがとうございます。
同様の問題についてすでにいくつかの質問があることは知っていますが、解決策/回答のいずれも私の問題を解決しなかったか、それらが十分に詳細でなく、あまりにも長い間非アクティブでした。