Vb.net 如何知道客户端工作站上是否安装了MS图表控件?

Vb.net 如何知道客户端工作站上是否安装了MS图表控件?,vb.net,exception-handling,clickonce,mschart,Vb.net,Exception Handling,Clickonce,Mschart,我使用MS图表控件开发了一个ClickOnce应用程序。它适用于图表部分。 但是,由于需要预先安装图表控件(具有管理员权限,而不是经典的ClickOnce部署),因此我需要检测该组件是否在计算机上可用 因此,我尝试创建一个新图表并处理可能的异常,但似乎无法捕获它(级别太低的异常?): 此代码从未执行过:只要输入此代码所在的事件,我就会收到一个未处理的异常 有关调用的详细信息,请参阅此消息的结尾 即时(JIT)调试,而不是此对话框 ******异常文本******System.IO.FileNot

我使用MS图表控件开发了一个ClickOnce应用程序。它适用于图表部分。 但是,由于需要预先安装图表控件(具有管理员权限,而不是经典的ClickOnce部署),因此我需要检测该组件是否在计算机上可用

因此,我尝试创建一个新图表并处理可能的异常,但似乎无法捕获它(级别太低的异常?):

此代码从未执行过:只要输入此代码所在的事件,我就会收到一个未处理的异常

有关调用的详细信息,请参阅此消息的结尾 即时(JIT)调试,而不是此对话框

******异常文本******System.IO.FileNotFoundException:无法加载文件或程序集 'System.Windows.Forms.DataVisualization,版本=3.5.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35'或其 依赖关系。系统找不到指定的文件。文件名: 'System.Windows.Forms.DataVisualization,版本=3.5.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35'位于 SIPReportingControl.Main.expMain\u SelectedGroupChanged(对象发送方, GroupEventArgs(e)位于 Infragistics.Win.UltraWinExplorerBar.SelectedGroupChangedEventHandler.Invoke(对象 发件人,GroupEventArgs(e)

您是否有以下想法:

  • 能够使用ClickOnce部署MS图表控件(我认为这是不可能的)
  • 检测是否安装了图表控件
  • 抓住这个奇怪的例外
提前谢谢

编辑 调用方法(即使我在其他组中单击而不是在报告中单击,也会生成异常):


我看到了一个有趣的答案,关于函数调用生成的MSIL代码中抛出的异常,不幸的是,它已被删除,我无法向其添加注释

我知道你的代码不负责触发事件。我建议将整个声明放在sub中,并用try-catch将其称为附件,如下所示:

Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged 
    Try 
        RedirectTo(e.Group.Key)
    Catch ex As Exception 
        MsgBox(ex.Message & vbCrLf & ex.StackTrace) 
    End Try 
End Sub 

Sub RedirectTo(Screen as string)
    If blnDoEvent Then 
        CleanControls() 
        Select Case Screen 
            Case "Search" 
                 DisplayGrid(True) 
            Case "AddEdit" 
                 DisplayAddEdit(Nothing) 
            Case "Reporting" 
                 Dim oChart As New Chart 
        End Select 
    End If
End Sub

更好吗?

我看到了一个有趣的答案,关于为函数调用生成的MSIL代码中引发的异常,不幸的是,它已被删除,我无法添加注释

我知道你的代码不负责触发事件。我建议将整个声明放在sub中,并用try-catch将其称为附件,如下所示:

Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged 
    Try 
        RedirectTo(e.Group.Key)
    Catch ex As Exception 
        MsgBox(ex.Message & vbCrLf & ex.StackTrace) 
    End Try 
End Sub 

Sub RedirectTo(Screen as string)
    If blnDoEvent Then 
        CleanControls() 
        Select Case Screen 
            Case "Search" 
                 DisplayGrid(True) 
            Case "AddEdit" 
                 DisplayAddEdit(Nothing) 
            Case "Reporting" 
                 Dim oChart As New Chart 
        End Select 
    End If
End Sub
更好吗

Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged 
    Try 
        RedirectTo(e.Group.Key)
    Catch ex As Exception 
        MsgBox(ex.Message & vbCrLf & ex.StackTrace) 
    End Try 
End Sub 

Sub RedirectTo(Screen as string)
    If blnDoEvent Then 
        CleanControls() 
        Select Case Screen 
            Case "Search" 
                 DisplayGrid(True) 
            Case "AddEdit" 
                 DisplayAddEdit(Nothing) 
            Case "Reporting" 
                 Dim oChart As New Chart 
        End Select 
    End If
End Sub