【问题标题】:Launch CMD.exe in admin mode under another user context在另一个用户上下文下以管理员模式启动 CMD.exe
【发布时间】:2016-12-23 14:10:06
【问题描述】:

有人能告诉我我正在尝试的事情是否可行吗?

我的问题是在 Windows 10 上(在 Windows 7 上以下工作)

我想以编程方式创建一个在管理模式下启动的“CMD.exe”实例,从而在创建 CMD 进程时指定管理员用户的详细信息。

我的最终结果总是一样的:

  1. 我可以创建 CMD.exe 进程
  2. 进程的所有者是我创建它时使用的管理员帐户(我可以通过任务管理器查看)

但 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() 让它工作并更新调用用户“替换进程级令牌”权限。这个解决方案现在就足够了。

标签: c# windows cmd


【解决方案1】:

您是否尝试过添加应用程序清单:

<requestedExecutionLevel level="requireAdministrator" />  

好像以管理员身份创建进程,你需要成为管理员。

很抱歉,我在这里写了。我对cmets的声望不够。

【讨论】:

  • 为了什么?对于cmd?
  • 不,对于项目。
  • 他只想在 admin 下启动 CMD.exe,而不是自己的应用程序。
  • 我明白,但是这种方法解决了他的问题。我只是提供一个变体。
  • 我试过这个,但是当 CMD 启动时它会提示输入用户名/密码。我试图避免这种情况,并在管理员模式下自动启动 CMD(注意:在我上面的代码示例中,我为我的管理员用户传递了用户名/密码详细信息)。
猜你喜欢
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多