如何知道客户端工作站上是否安装了MS Chart Controls?

时间:2011-10-14 09:15:11

标签: vb.net exception-handling clickonce mschart

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

所以我尝试创建一个新的Chart并处理可能的Exception,但它似乎无法捕获它(太低级别的Exception?):

Try
  Dim oChart as New Chart
Catch
  ' Some user-friendly message to ask the user to contact the helpdesk
End Try

此代码永远不会执行:只要我输入此代码所在的事件,我就会得到一个未处理的异常。

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

  

** * ** 异常文字 ** * **** System.IO.FileNotFoundException:无法加载文件或程序集   'System.Windows.Forms.DataVisualization,Version = 3.5.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个   依赖。该系统找不到指定的文件。文件名:   'System.Windows.Forms.DataVisualization,Version = 3.5.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35'at   SIPReportingControl.Main.expMain_SelectedGroupChanged(对象发送者,   GroupEventArgs e)at   Infragistics.Win.UltraWinExplorerBar.SelectedGroupChangedEventHandler.Invoke(对象   sender,GroupEventArgs e)

你有什么想法,以便:

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

提前致谢。

修改 调用方法(即使我点击另一个组而不是报告,也会生成异常):

Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged
    Try
        If blnDoEvent Then
            CleanControls()
            Select Case e.Group.Key
                Case "Search"
                    DisplayGrid(True)
                Case "AddEdit"
                    DisplayAddEdit(Nothing)
                Case "Reporting"
                    Dim oChart As New Chart
            End Select
        End If
    Catch ex As Exception
        MsgBox(ex.Message & vbCrLf & ex.StackTrace)
    End Try
End Sub

1 个答案:

答案 0 :(得分:1)

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

我了解您的代码不负责触发事件。我建议把整个语句放在一个sub中,然后用try方法调用它:

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

它更好吗?