0

投稿の下の質問の上の TL;DR バージョンがあります。管理できない外部アセンブリへの参照を持つプログラムがあります。基本的に、Card PinPad リーダーへの接続を管理し、カードから読み取った情報を整理します。いくつかの簡単なコードがあります:

    Try
        pinpad.readcard(lecturaEntrada, lecturaSalida)
    Catch ex As Exception
        MsgBox("Failed Card read " & ex.Message)
        Exit Sub
    End Try

ここで何が起こるかというと、Pinpad はカードが読み取られるのを待ち、ユーザーはデバイスのキャンセルをクリックしてキャンセルできます。「ユーザーによってキャンセルされました」という ex.message を使用して、例外をスローします。実際にはシステム例外ではないため、作成/管理された例外であると確信しています。そのため、いつでも 100% の割合でエラー/例外を再現できます。

私はそれを使っていくつかのテストを行い、毎回例外をスローしました。その後、本番/テストPCにエクスポートしました。もう機能しないことに気付くだけです。そして、いろいろいじくり回した後、VStudio デバッグ ランタイムでプログラムを実行すると、try catch が完全に機能することがわかりました。そして、実行可能ファイルを使用するたびに、ターゲット PC であれ、自分の DEV PC であれ、実行可能ファイルの try catch に問題があり、何もキャッチせず、プログラムをクラッシュさせるだけです。

TLDR: プログラムには try catch ルーチンがあります。VS2010 デバッグ ランタイム内では正常に動作し、.exe を使用すると動作しません。

それが機能するために私ができることはありますか?実行可能ファイルの作成中に、プログラムのキャッチを試みる機能を排除している舞台裏で私が知らない何かが起こっていますか?

編集:最適化をオフにして、管理者として実行しようとしましたが、役に立ちませんでした。Google も回答を投げていません

編集:スタックトレースはそのままです:

en Banorte.NET.procearExcepcion(APIException* e)
en Banorte.PinPan.PinPadVerifone.leertarjeta(hashtable parametrosEntrada, hashtable parametrosSalida)
en PruebasPinPad.form.btnPagoTDC_click(objectsender,eventargs e) en C:\VS2010\PruebasPinPad\Form.vb:linea191

また、内部例外はありません

編集:.exeを直接デバッグしようとしたときに、このスタックトレースを見つけました:

System.AccessViolationException was unhandled
  Message=Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.
  Source=BanortePinPad
  StackTrace:
       en std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}(basic_string<char\,std::char_traits<char>\,std::allocator<char> >* )
       en APIException.{dtor}(APIException* )
       en ___CxxCallUnwindDtor(IntPtr pDtor, Void* pThis)
       en leerTarjetaEx(map<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> >\,std::basic_string<char\,std::char_traits<char>\,std::allocator<char> >\,std::less<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > >\,std::allocator<std::pair<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > const \,std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > > > >* mapaParametrosEntrada, map<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> >\,std::basic_string<char\,std::char_traits<char>\,std::allocator<char> >\,std::less<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > >\,std::allocator<std::pair<std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > const \,std::basic_string<char\,std::char_traits<char>\,std::allocator<char> > > > >* mapaParametrosSalida)
       en Banorte.PinPad.PinPadVerifone.leerTarjeta(Hashtable parametrosEntrada, Hashtable parametrosSalida)
       en PruebasPinPAD.Form.btnPagoTDC_Click(Object sender, EventArgs e) en C:\VS2010\PruebasPinPAD\Form.vb:línea 191
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ButtonBase.WndProc(Message& m)
       en System.Windows.Forms.Button.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       en PruebasPinPAD.My.MyApplication.Main(String[] Args) en 17d14f5c-a337-4978-8281-53493378c1071.vb:línea 81

Heresと編集して、私の質問を少し上げます。事前に助けてくれてありがとう、そしてこれまで助けようとしてくれた人に感謝します。私はまだこれを理解しようとしています。

編集: exe のデバッグ中にエラーが表示されました。AccessViolationException が処理されませんでした。保護されたメモリで読み取り/書き込みができません。

4

1 に答える 1