0

私はVB.NETプロジェクトを持っており、私の開発マシンでは正常に動作します (当然 :-)) が、テストした 2 台の異なるコンピューターで特定のフォームを開こうとすると、次のエラーが発生します。3 台のコンピューター (動作する私の開発マシンを含む) はすべて Windows 7 64 ビット マシンで、2 台は Professional Edition (私のものを含む) で、3 台目は Home Basic です。

私の疑いでは、私が挿入したWindows Media Playerまたは Adob​​e SWF プレーヤー コントロールと関係があるのではないかと考えています。エラーは次のとおりです。

System.Runtime.InteropServices.COMException (0x80040154): Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
at System.Windows.Forms.AxHost.CreateInstance()
at System.Windows.Forms.AxHost.GetOcxCreate()
at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
at System.Windows.Forms.AxHost.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.AxHost.EndInit()
at WizoDesktop.FormPlayer.c4cf84dbbc00986a0b43ce266bdec20d7()
at WizoDesktop.FormPlayer..ctor()
at A.c237671a6e3a2745adc05bbdc0150506d.cff280b017b22ca351191a6adb2feeae4()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
4

1 に答える 1

1

Hans が言うように、使用しているプログラム (WMP、Flash) がターゲット マシンにインストールされていない可能性が高いために発生します。最も簡単な方法は、これを検出して、すべての機能を使用するにはこれらのプログラムをインストールする必要があることをユーザーに警告することです。だから、このようなもの:

Try
     Dim test as New WindowMediaPlayerControl 
Catch ex as exception
     MsgBox("The program requires Media Player to be installed.")
End Try 

次に、フラグを設定して、コントロールを含むウィンドウをロードしないようにして、ユーザーにエラーが表示されないようにすることもできます。

これが可能かどうかはわかりませんが、ClickOnce 配置を使用している場合は、必要なカスタム インストーラーをプログラムに追加する可能性について、こちらを参照してください。http://msdn.microsoft.com/en-us/library/ms165429(VS.80).aspx

編集: Hans が指摘したように、私の Try Catch は上で少し怠惰です。特定のエラーを処理しようとしている場合は、常に非常に具体的にするようにしてください。今回の場合はこんな感じ。

Catch ex As System.Runtime.InteropServices.COMException When ex.Message.Contains("REGDB_E_CLASSNOTREG")
于 2012-12-04T18:25:13.357 に答える