【问题标题】:Start process with default credentials使用默认凭据启动进程
【发布时间】:2012-02-17 14:19:28
【问题描述】:

我正在使用我的凭据运行一个进程,但是我想使用默认凭据,我的意思是使用当前的用户名和密码,而无需通过以下代码:

var pass = new SecureString();
pass.AppendChar('p');
pass.AppendChar('a');
pass.AppendChar('s');
pass.AppendChar('s');
pass.AppendChar('w');
pass.AppendChar('o');
pass.AppendChar('r');
pass.AppendChar('d');
Process.Start("file.txt", Environment.UserName, pass, "");

因为应用程序将在不同的计算机上运行,​​所以它应该获取当前的凭据并使用它们。

编辑

问题是我要运行的文件是一个 .bat 文件,它将执行一些 cmd 命令,并且必须提供凭据才能使用

【问题讨论】:

标签: c# process io environment credentials


【解决方案1】:

我不明白:如果您想使用默认凭据执行进程,请不要传递任何内容:

Process.Start("file.txt");

如果你需要更复杂的语法、重定向输入/输出、隐藏窗口或其他你可以使用ProcessStartInfo的东西。

用户编辑后已编辑:
您根本无法恢复用户密码,这是不允许的。
正如this link报道的那样:

可以获取当前用户所在的当前身份 线程正在运行(不一定是登录用户)使用 WindowsIdentity.GetCurrent().
或者,您可以登录 通过Environment.UserName 属性的用户名。
不保证 但是,要成为运行当前进程的用户。
没有 用于获取用户密码的 Windows API,因为密码未存储在 窗户。
相反,Windows 存储单向哈希版本。

【讨论】:

    【解决方案2】:

    只需使用Process.Start(@"Path")。通过不提供任何凭据,将获取当前用户的上下文。

    【讨论】:

    • 但问题是我要运行的文件是一个 .bat 文件,它将执行一些 cmd 命令,并且必须提供使用凭据
    • 必须使用哪些凭据才能在客户的电脑上运行 .bat 文件?必须是 AD 用户吗?
    【解决方案3】:

    如果 cmd 内部有人重新询问您的凭据,则无法以编程方式获取当前用户的密码,因此您唯一的办法就是再次询问用户密码,但这会可能是一个安全漏洞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多