none
C# 如何处理 OCX 未注册的异常 RRS feed

  • 问题

  • 请教:

         问题描述:

               1、C#, WinForm 开发中,在窗体类中如果使用了ocx 的内容。

               2、运行程序时,如果 ocx 未注册,会出现COMException异常:

    没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    Source: 在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
    在 System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
    在 System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
    在 System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
    在 System.Windows.Forms.AxHost.CreateInstance()
    在 System.Windows.Forms.AxHost.GetOcxCreate()
    在 System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
    在 System.Windows.Forms.AxHost.CreateHandle()
    在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    在 System.Windows.Forms.AxHost.EndInit()
    在 FrmMain.InitializeComponent()

     

     

            “特别“ 想请教一下:

             1、首先,如何在程序运行过程中捕获此类异常

             2、然后,通知用户存在哪些未注册的ocx

     

    请教如何实现上面两项需求呢?

     

    谢谢关注

     

     


    Healthy
    • 已编辑 Healthy 2011年11月22日 3:39
    2011年11月22日 3:37

答案

  • 你好,

    这个问题比较难实现,这是因为,这个异常是因为COM组件没有正确注册的原因引起的,当程序集加载的时候,如果这个组件就需要被加载进来,那么这个异常是在加载过程中发生的,没有办法通过代码来捕捉。

    应用程序中使用了组件,那么注册组件时运行该应用程序的前提条件,可以给应用程序添加一个setup项目,生成一个安装文件,在安装过程中注册组件,以避免发生此类异常。

    要注册组件,可以使用regsvr32.exe注册一下即可。

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Paul Zhou 2011年11月29日 5:40
    2011年11月23日 9:15