【问题标题】:I'm getting errors when I try open a URL in VB当我尝试在 VB 中打开 URL 时出现错误
【发布时间】:2012-11-25 21:47:20
【问题描述】:

当我尝试在 VB 中打开 URL 时,我收到“System.dll 中出现‘System.ComponentModel.Win32Exception’类型的第一次机会异常”错误。我尝试了多种打开网站的方法,但都返回了这个错误。我现在使用的代码是这样的

Public Class Revise

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Bitesize.Click
        Dim bitesize As String = "http://www.bbc.co.uk/bitesize/standard/"
        Process.Start(bitesize)
    End Sub
End Class

我对编程很陌生,如果这是我犯的一个愚蠢的错误,我很抱歉。

错误详情:

System.ComponentModel.Win32Exception was unhandled
  ErrorCode=-2147467259
  HResult=-2147467259
  Message=Unknown error (0x80041002)
  NativeErrorCode=-2147217406
  Source=System
  StackTrace:
       at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start()
       at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start(String fileName)
       at WindowsApplication1.Revise.Button1_Click(Object sender, EventArgs e) in C:\Users\Lewis\Documents\Visual Studio 11\Projects\Study Time!\Study Time!\Revise.vb:line 7
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(ApplicationContext context)
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

【问题讨论】:

  • 我无法使用您提供的代码重现此问题。 Process.Start 使用 shell 执行它,所以它应该可以工作。
  • 在我的电脑上使用 Chrome 作为默认浏览器运行良好。你的默认浏览器是什么?

标签: vb.net url visual-studio-2012


【解决方案1】:

Process.Start 实际上是在操作系统中执行一个程序。您尝试访问的 url 不是操作系统上程序的名称,因此它会失败。如果您想使用此 url 打开外部浏览器实例,您需要将该程序作为进程打开。

Private Sub Button1_Click(ByVal sender as Object, ByVal e as EventArgs) Handles Bitesize.Click
    Dim bitesize as String = "http://www.bbc.co.uk/bitesize/standard/"
    Dim programName as String = "iexplore.exe"

    Process.Start(programName & " " & bitesize)
End Sub

这应该可以实现您正在寻找的效果,但是在 winforms 应用程序中,使用 WebBrowser 控件并在单击按钮时填充其 url 属性会更有意义。

编辑:
要在系统的默认浏览器中打开一个 url,你可以简单地将你的 programName 设置为“start”。

Dim programName as String = "start"

这是 Windows 中的一个快捷方式,它将使用默认浏览器自动打开一个 url。

【讨论】:

  • 谢谢,正如我所说,我对此真的很陌生,我不确定 webbrowser 控件是什么以及如何填充它,还有,有没有办法选择默认值浏览器,而不是 IE?
  • @LewisLappin:Process.Start 命令将运行程序有权执行的任何可执行文件。关键是您必须知道正确的可执行文件的名称,除非您想使用默认值。如果您想使用默认浏览器,它会更简单。我将发布对我的答案的编辑。
  • 谢谢,但它仍然向我抛出错误。我已将代码更新为: Dim bitize As String = "bbc.co.uk/bitesize/standard" Dim programName As String = "start" Process.Start(programName & "" & bitize) 但它给了我同样的错误,我不得不开始.
【解决方案2】:

该代码(听起来您已经知道)将使用您计算机的默认网络浏览器打开该网站。您的代码是正确的(尽管方法名称应该与它正在侦听的控件匹配,因此当您有一个包含大量事件处理程序的表单时,它会更容易阅读)。

我的猜测(没有详细信息 - 将来,请尝试发布异常堆栈跟踪),将无法确定您的默认 Web 浏览器。试试这个:打开 Control Panel\Programs\Default Programs\Set Associations .. 并找到 HTTP 协议(​​在所有文件扩展名关联之后)并重置关联的应用程序。

其次,这是另一个很好的学习机会,当您的代码可能出错时(例如启动另一个进程),最好将该代码包装在 Try/Catch 块中。然后如果出现问题,您可以处理它,而不是让您的应用程序崩溃。

Try
    Dim bitesize As String = "http://www.bbc.co.uk/bitesize/standard/"
    Process.Start(bitesize)
Catch Ex As Exception
    MessageBox.Show(Ex.Message)
End Try

用于 System.Diagnostic.Process.Start 的 MSDN http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

如果您仍然遇到问题,请发布堆栈跟踪,这可能有助于更清楚地了解问题所在。

【讨论】:

  • 谢谢,很高兴知道我做对了。我查看了我的默认浏览器是什么,它说“未知应用程序”,我更改了它,但只出现了将其更改为 IE 的选项(我使用 chrome 作为我的默认浏览器,似乎工作正常),但我仍然收到错误.另外,我不太确定您所说的异常堆栈跟踪是什么意思,但我想我可能已经找到了,是您单击第一次机会异常框上的查看详细信息时吗?
  • 如何找到堆栈跟踪 -> stackoverflow.com/questions/945193/…
  • 谢谢,这里是:> 学习时间!.exe!WindowsApplication1.Revise.Button1_Click(Object sender, System.EventArgs e) Line 7 Basic
  • -2147467259 仍然是 Windows 不知道它需要打开的文件扩展名或协议与什么相关联。您的问题出在 Windows 上(特别是注册表中的 HKEY_USER 配置单元)。由于您已经尝试通过控制面板重置 http 关联,因此您有 2 个选择,重新安装 Windows 或自己创建一个新用户帐户,您将获得为该帐户创建的全新注册表配置单元(嗯..从 HKEY_USERS/.DEFAULT 复制) - 这应该可以解决您的问题。否则是时候重新安装 Windows 了。
猜你喜欢
  • 2023-04-08
  • 2019-01-11
  • 2016-11-13
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
相关资源
最近更新 更多