在 C# 中实现 runas

Posted

技术标签:

【中文标题】在 C# 中实现 runas【英文标题】:Implementing runas in C# 【发布时间】:2012-10-01 06:16:23 【问题描述】:

我该如何实施 runas /noprofile /netonly /user:@ 使用 C#。

System.Diagnostics.ProcessStartInfo 具有用户、域、密码、动词(我们可以在其中使用 runas)等字段,但如何设置 netonly。使用 Cmd 它不需要令牌,但在使用诊断时请求令牌,因为出现安全错误““服务器上的安全数据库没有此工作站信任关系的计算机帐户””,因为我的系统不是该域中值得信赖的合作伙伴。在 Cmd 中没有遇到这样的问题。我想使用 UI 输入用户信息。由于我的系统不是值得信赖的合作伙伴,因此我无法使用模拟。

【问题讨论】:

几年前,我写过a small impersonation class,可能对您的要求有所帮助。 要使用模拟 PC 应该是域的受信任伙伴,而我的不是受信任的系统,所以我不能使用模拟。使用模拟时会引发相同的异常。 【参考方案1】:

您已尝试使用带有 ProcessStartInfo 的 runas 动词执行新进程。但这与在命令提示符下执行 runas 进程不同。

因此,复制您在命令提示符处所做的操作的简单方法是执行传递所有参数的 runas 程序,就像您在命令提示符处执行的操作一样。

Process.Start("runas.exe", "/noprofile /netonly ......");

我不明白您尝试的细微差别。但是,如果通过 cmd 运行完全符合您的需要,那么您可以这样做:

Process.Start("cmd.exe", "/c runas /noprofile /netonly ......");

【讨论】:

Process.Start("runas.exe", " /noprofile /netonly /user: " + Application.StartupPath + filename); Cmd 的弹出来和不带输入(密码)。 如果路径包含空格,您可能需要用引号括起来 您也可以尝试 ProcessStartInfo 重载并将 UseShellExecute 设置为 false。虽然我看不出这会有什么不同。 我也试过了,不会有区别。我已经将动词设置为'runas',将loadProfile设置为false,并指定用户名和密码,shellExecute为false,抛出与以前相同的异常(不受信任的合作伙伴)即进程正在使用用户令牌,而 cmd 未使用任何令牌。 "我已将动词设置为 'runas'" 你为什么这样做?无论如何,您是否将路径用引号括起来?可以为我们做一些诊断,让我们知道"/noprofile /netonly /user: " + Application.StartupPath + filename" 的评估结果。

以上是关于在 C# 中实现 runas的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中实现 ORM

数组如何实现 IList<T> 而无需在 C# 中实现属性“Count”? [复制]

在 C# 中实现格雷厄姆扫描

如何在 C# 中实现 Base64 URL 安全编码?

是否可以在 C# 中实现 mixins?

在 C# 中实现 Equals 但不是 GetHashCode [重复]