首页 > 解决方案 > process.Start() 不适用于 Microsoft Edge 或 Internet Explorer

问题描述

我最近更新了我的应用程序以将 oauth 用于 swagger 界面,这需要打开特定 URL 的网页并让用户授权访问。然后我监听发送到本地主机的响应并处理访问令牌等。为此,我只需调用 process.Start(URL)

这是我的代码:

Private Sub GetAuthorizationfromWeb()
    Try
        ' Build the authorization call
        Dim URL As String = ESIAuthorizeURL & "?response_type=code" & "&redirect_uri=http://"
        URL &= LocalHost & ":" & LocalPort & "&client_id=" & ClientID & "&scope=" & ScopesString

        Process.Start(URL)

        Dim mySocket As Socket = Nothing
        Dim myStream As NetworkStream = Nothing
        Dim myReader As StreamReader = Nothing
        Dim myWriter As StreamWriter = Nothing

        myListner.Start()

        mySocket = myListner.AcceptSocket() ' Wait for response
        Debug.Print("After socket listen")
        myStream = New NetworkStream(mySocket)
        myReader = New StreamReader(myStream)
        myWriter = New StreamWriter(myStream)
        myWriter.AutoFlush = True

        Do
            AuthStreamText &= myReader.ReadLine & "|"

            If AuthStreamText.Contains("code") Then
                Exit Do
            End If
        Loop Until myReader.EndOfStream

        myWriter.Write("Login Successful!" & vbCrLf & vbCrLf & "You can close this window.")

        myWriter.Close()
        myReader.Close()
        myStream.Close()
        mySocket.Close()
        myListner.Stop()

        Application.DoEvents()
    Catch ex As Exception
        Application.DoEvents()
    End Try

End Sub

当 Firefox 和 Chrome 被设置为默认浏览器时,所有这些都可以正常工作。但是,当我尝试启动将 Edge 或 Internet Explorer 设置为默认浏览器的 URL 时,它只会打开一个空白网页或主页。没有尝试导航到作为参数设置的 URL。

我试图找到另一种方法来做到这一点,但基本上 process.Start 似乎是唯一的选择。出于安全原因,我不会在我的代码中嵌入网络浏览器。

有什么想法吗?

标签: vb.net

解决方案


推荐阅读