【发布时间】:2016-12-23 14:10:06
【问题描述】:
有人能告诉我我正在尝试的事情是否可行吗?
我的问题是在 Windows 10 上(在 Windows 7 上以下工作)
我想以编程方式创建一个在管理模式下启动的“CMD.exe”实例,从而在创建 CMD 进程时指定管理员用户的详细信息。
我的最终结果总是一样的:
- 我可以创建 CMD.exe 进程
- 进程的所有者是我创建它时使用的管理员帐户(我可以通过任务管理器查看)
但 CMD.exe 无法在管理模式下启动(这是我的问题)
这是我的代码 - 非常感谢任何帮助(我已经花了很长时间查看这个“)。我读过的任何其他文章都指出了如何以管理员身份创建进程,而不是在管理员模式下运行它在 Windows 10 上)
ProcessStartInfo p = new ProcessStartInfo();
p.WorkingDirectory = @"C:\Windows\System32";
p.FileName = @"C:\Windows\System32\cmd.exe";
p.UserName = "myUser";
p.Domain = "myDomain";
char[] password = { 'm', 'y', 'p', 'a', 's', 's'};
SecureString adminpassword = new SecureString();
foreach (char c in password)
{
adminpassword.AppendChar(c);
}
p.Password = adminpassword;
p.UseShellExecute = false;
p.Verb = "runas";
Process.Start(p);
【问题讨论】:
-
您必须使用
LOGON32_LOGON_BATCH来创建提升的令牌。 .NET 似乎没有公开此选项,您可能不得不求助于 P/Invoke。有关 C++ 版本,请参阅 stackoverflow.com/a/21718198/886887。 -
感谢您为我指明正确的方向,Harry Johnson。我设法通过 Win32.LogonUser() 让它工作并更新调用用户“替换进程级令牌”权限。这个解决方案现在就足够了。