【问题标题】:Run Internet Explorer as a different user以其他用户身份运行 Internet Explorer
【发布时间】:2018-06-06 22:54:58
【问题描述】:

我正在尝试使用其他用户启动 Internet Explorer 以访问需要单点登录的网站。

下面是我正在使用的代码。它不会产生任何错误,但 IE 根本不会启动,甚至进程也不会启动。

Try

    System.Diagnostics.Process.Start(IExplorerPath, Username, ConvertToSecureString(Password), Domain)

    Success = True

Catch ex As Exception

    Success = False
    Error_Message = ex.Message

End Try

我还尝试了以下变体,结果相同(无):

Try

    Dim psi As New ProcessStartInfo()

    psi.Filename = IExplorerPath
    psi.UserName = Username
    psi.Domain = Domain
    psi.Password = ConvertToSecureString(Password)
    psi.UseShellExecute = False
    Process.Start(psi)

    Success = True

Catch ex As Exception

    Success = False
    Error_Message = ex.Message

End Try

这是 ConvertToSecureString 函数:

Function ConvertToSecureString(ByVal str As String)
    Dim password As New SecureString
    For Each c As Char In str.ToCharArray
        password.AppendChar(c)
    Next
    Return password
End Function

【问题讨论】:

  • 它肯定会抛出某种错误...为什么不注释掉Try/Catch 语句并让您的调试器处理崩溃,以便您可以正确检查它? -- 另外,您是否真的检查了任务管理器并看到没有启动任何 IE 进程?我以前从未以与代码不同的用户身份启动过进程,但是如果它在他们的会话中而不是当前会话中启动怎么办?那你就看不到窗户了。尝试输入您自己的凭据,看看会发生什么。
  • 测试结果: 1)注释掉 Try/Catch 会生成一个错误,指出用户名/密码不正确/未知,这很奇怪,因为我尝试手动执行(shift + 右键单击​​ IE 可执行文件) 并且它确实有效。 2)是的,我检查了任务管理器那里什么都没有。 3) 我使用了我的凭据,它确实有效。
  • 如果是这种情况(它正在他们的会话中启动),我应该在我的代码中进行哪些更改以使其显示在当前代码中?
  • ConvertToSecureString 中可能有错误。
  • 如果是这种情况,我的凭据应该会出错。我也将该函数用于其他脚本

标签: vb.net internet-explorer impersonation runas


【解决方案1】:

好的,我一直在为此寻找很多解决方案,如果你有它,你应该获得诺贝尔奖。同时,如果它可以帮助任何人,这是我必须使用的解决方法:

使用 Process.Start 运行包含以下代码的 .bat 文件:

runas /user:User@Domain.com "C:\Program Files\Internet Explorer\iexplore.exe"

然后,当出现命令提示符时,我使用发送键输入密码并按 Enter。

这会使用不同的凭据启动 IE。但同样,应该有更好的方法。

【讨论】:

  • FWIW 的改进是redirect the process's standard input 并将密码写入其中。使用SendKeys 输入它不是很安全(我的解决方案也不是那么安全,但它更安全)。
  • 另外,您不必创建批处理文件。您可以通过使用进程名称和参数创建 ProcessStartInfo class 的实例来直接打开 CMD 实例,如下所示:Dim psi As New ProcessStartInfo("cmd.exe", "/C runas /user:User@Domain ""C:\Program Files\Internet Explorer\iexplore.exe""")
  • (对垃圾邮件感到抱歉)或者更好的是非硬编码版本:Dim psi As New ProcessStartInfo("cmd.exe", "/C runas /user:User@Domain """ & Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Internet Explorer", "iexplore.exe") & """")
  • 我喜欢你的方法,这比有一个批处理文件挂在那里要好。谢谢@VisualVincent
  • 很高兴我能提供帮助,尽管我们未能解决您最初的问题。
【解决方案2】:

这可能/可能不起作用。尝试在“CHROME”中启动需要单点登录的网站,点击 F-12,转到应用程序选项卡 -> Cookies -> 单击您的站点链接。在左侧查找代表您的会话 id 的东西,可能是 JSESSIONID 或类似的,复制它。现在打开您的 Internet Explorer,按 F-12 并通过在控制台窗口中运行此命令手动创建该 JSESSIONID

document.cookie = "JSESSIONID=<your-session-id-from-chrome"

点击播放按钮执行脚本 刷新浏览器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多