我编写了一个程序,需要提升运行才能调用 WMI 对象的两种方法。如果由管理员组中的用户在“提升模式”下运行,它就像一个魅力。但现在的问题是它需要由每个人运行,而不是每个人都在他们工作的机器上拥有管理权限。所以我决定让程序重新启动自己,模拟“域管理员”组中的用户。
我的代码如下:
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 时有两个问题。首先,如果我没有明确地将应该被模拟的用户添加到程序的 installfolder 的 ACL 中(用户已经在管理员组中,该组对文件夹和其中包含的所有文件具有完全访问权限)它会抛出一个System.ComponentModel.Win32Exception: The directory name is invalid
. 我仔细检查了目录路径,它实际上是有效的(当用户明确地在 ACL 中时有效)。
现在,如果明确添加了用户并且没有例外,则程序以用户身份运行但没有提升的权限,因此调用不起作用。
我究竟做错了什么?谢谢你的帮助。
我知道已经有一些关于类似问题的问题,但没有一个解决方案/答案解决了我的问题,或者它们不够详细并且太长时间处于非活动状态。