C# 使用登录的用户凭据启动进程

Posted

技术标签:

【中文标题】C# 使用登录的用户凭据启动进程【英文标题】:C# Start Process with logged on user credentials 【发布时间】:2013-03-19 21:13:21 【问题描述】:

我正在运行具有提升的用户权限的 winforms 应用程序(模拟作为不同的域管理员帐户运行),但是我想启动一个子进程,即打开一个具有当前登录用户权限的 URL 的网络浏览器,而不是提升权限,而无需提示他们输入密码和登录信息,因此它可以正确地与当前登录的用户权限握手 NTLM。

我尝试过类似的方法:

// I have the USER NAME, this is not the issue
// I have the Domain, this is not the issue

// I need to grab the Password from the currently logged on user 
// without prompting for it

System.Security.SecureString oPass = new System.Security.SecureString();
System.Diagnostics.Process.Start("IExplore.exe"
   , this.oConfiguration.WrappersURL
   , this.WindowsUserID
   , oPass
   , this.DomainName
  );

..但我不太确定如何获取用户的密码。关于如何减少 W7 和 XP 兼容的登录用户对生成进程的权限的任何想法?

【问题讨论】:

这是 Web 还是 Windows 应用程序..?你有没有尝试过这个string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 您将无法获得用户的密码 - 即因为它没有存储在任何地方...您能否澄清“提升”是指“具有管理员权限的不同用户”或“相同的管理员用户” ,但具有更高的权限(由于 UAC)" 应用程序正在作为具有管理员权限的不同本地管理用户帐户运行,我想使用当前登录的用户帐户生成一个进程。 你熟悉SSPI吗?如果不是,我建议你尝试使用它来实现一些东西..我也做了一些类似于这个网站上的东西,它的代码太多了,但你可以看看它并尝试codinghorror.com/blog/2004/11/… 唯一的其他选择是进行模拟,如果您想跟踪用户..用户这个var userNameSplit = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\'); 在调用模拟功能之前存储当前用户这样做有意义 How do you de-elevate privileges for a child process的可能重复 【参考方案1】:

获取当前用户并以这种方式启动:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Process.Start(startInfo);

【讨论】:

我有身份,我只需要恶搞密码【参考方案2】:

您想要获取域名和用户名,请执行以下操作

编辑:

var userNameSplit = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\');
var userDomain = userNameSplit[0];
var userName = userNameSplit[1];

【讨论】:

不,我有用户名和域名,只是没有用户密码 您不会知道用户密码听起来您可能仍需要提示输入用户密码..让我检查一下我已经完成了类似的事情,然后我将更新我的答案很少有人让我找到几个月前用来做同样事情的代码 在我最初的问题中,我特别说,......“无需提示他们输入密码和登录信息”。【参考方案3】:

似乎没有办法在 Windows 中执行此操作,因此我最终通过执行以下操作来解决这个难题:

    在当前用户下生成一个控制器进程。 在当前登录的用户下生成任务进程。 生成另一个任务进程并将其权限提升到管理帐户。 使用控制器进程来管理/通知两个任务进程(它们是 除凭据外相同)。 在某些情况下,让用户进程初始化运行程序应用程序,然后让管理任务指导应用程序工作。

丑陋,骇人听闻,有点令人费解,但这就是企业安全:D

【讨论】:

以上是关于C# 使用登录的用户凭据启动进程的主要内容,如果未能解决你的问题,请参考以下文章

进程启动但在使用 CreateProcessLogonW 或类似方法启动时不起作用

以 Windows 登录用户身份从服务启动进程

如何从 C# 启动进程?

如何在启动程序且 UAC 被禁用时强制提示输入凭据?

使用 CreateProcessWithLogonW 从服务启动的进程立即终止

从 C# 启动远程进程的问题