gpt4 book ai didi

c# - System.Diagnostics.Process.Start 针对不同域的进程

转载 作者:太空狗 更新时间:2023-10-29 23:52:03 26 4
gpt4 key购买 nike

我们有一个场景,我们需要我们的用户能够启动 SQLServer 并使用不同于他们当前登录的域进行身份验证。所以要澄清这是设置的方式:

  1. 用户到达办公室并登录公司域(为简单起见,我们将其称为 LOCALDOMAIN)
  2. 他们希望连接到我们在不同域上的远程数据库(我们称之为 REMOTEDOMAIN)
  3. 首先,他们启动了 VPN 工具,该工具建立了到 REMOTEDOMAIN 的 VPN 隧道(这一切都经过测试并且运行良好)
  4. 但是如果他们默认启动 SSMS,它将只允许通过 LOCALDOMAIN 进行 Windows 身份验证,选择 REMOTEDOMAIN 的选项甚至不可用

我们发现从命令行运行它会起作用:

RUNAS /user:REMOTEDOMAIN\AUserName /netonly "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe

它将提示消息“输入 REMOTEDOMAIN\AUserName 的密码:”,如果您提供正确的密码,SSMS 将启动并可以连接到远程数据库。但是,当我尝试在 C# 中使用更好的界面做同样的事情时,我得到“登录失败:未知的用户名或错误的密码”,这是我的代码:

System.Security.SecureString password = new System.Security.SecureString();
foreach(char c in txtPassword.Text.ToCharArray()){
password.AppendChar(c);
}
System.Diagnostics.ProcessStartInfo procInfo = new System.Diagnostics.ProcessStartInfo();
procInfo.Arguments = "/netonly";
procInfo.FileName = @"C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"; ;
procInfo.Domain = "REMOTEDOMAIN";
procInfo.Verb = "runas";
procInfo.UserName = txtUsername.Text;
procInfo.Password = password;
procInfo.UseShellExecute = false;
System.Diagnostics.Process.Start(procInfo);

我尝试了带和不带域的用户名,但都不起作用。有人试过做类似的事情吗?谢谢

最佳答案

您应该删除以下行:

// Not passing /netonly to SMSS, it was passed to RunAs originally.
procInfo.Arguments = "/netonly";
// Again, SMSS is not getting the verb, it's being run
procInfo.Verb = "runas";

基本上,您将 /netonly 参数传递给 SMSS,而在命令行上,您运行的是 runas 不是 SMSS .与动词相同,您没有运行 runas

此时对 Start 的调用应该会成功,因为您将使用正确的凭据指向正确的可执行文件。

关于c# - System.Diagnostics.Process.Start 针对不同域的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com