私はこれをできる限り短くて甘いものにしようとします.
会社で毎日約 2000 の異なる電話番号に電話をかけるために使用するアプリケーションを作成しました (米国中に展開した非常に古いデバイスに連絡するために使用されます)。アプリケーションを Windows アプリケーションとして実行すると (C# と JulMar を使用して記述) ITAPI3 ラッパー) アプリケーションは、少なくとも私のコードがほとんど正しいことを教えてくれる問題なく堅実に動作しているようです....
私が遭遇している問題は、Windowsサービスと同じコードを実行するときです(新しいプロジェクトを作成し、Windowsアプリのように電話ダイヤルライブラリを呼び出すだけです)サービスは一定期間実行され(毎回異なります)、その後最後にクラッシュします。イベント ログを確認すると、アプリケーションの AccessViolation (0xc0000005) であることがわかります。例外が発生しているタピラッパーへの呼び出しの周りに try catch がありますが、catch がヒットすることはありません。その時点に戻る前にアプリがクラッシュすると想定しています。
つまり、Tapi アプリケーションは、Windows アプリケーションとして実行するとうまく動作しますが、Windows サービス (ローカル システムで実行) として実行すると、「問題のある」関数呼び出しの周りの try catch でキャッチされない AccessViolation エラーで最終的に失敗します。
何かご意見は?
これが役立つ場合、これは Windows Server 2008 で実行されています。
編集 1: ローカル ユーザー アカウント、ドメイン アカウント、ローカル システムなど、いくつかの異なる種類のユーザー アカウントとしてこのサービスを実行しようとしました。それらはすべてエラーになります。以下の障害の 1 つについて、イベント ログのスニペットを投稿しました。
      Application: EaglePolloutWindowsService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at <Module>.ATL.CComPtrBase<IUnknown>.{dtor}(ATL.CComPtrBase<IUnknown>*)
   at JulMar.Tapi3.Internal.TapiBase.Compare(IUnknown*)
   at JulMar.Tapi3.TTapi.FindInterface[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](IUnknown*)
   at JulMar.Tapi3.TCall.CreateCallAppearance(JulMar.Tapi3.TAddress, IUnknown*)
   at JulMar.Tapi3.TAddress.CreateCall(System.String, JulMar.Tapi3.LINEADDRESSTYPES, JulMar.Tapi3.TAPIMEDIATYPES)
   at EaglePhoneLibrary.Logic.Outgoing.EaglePollout.CreateNewCall(EaglePhoneLibrary.Entities.ConnectionEntity)
   at EaglePhoneLibrary.Logic.Outgoing.EaglePollout.CallTower(EaglePhoneLibrary.Entities.ConnectionEntity)
   at EaglePhoneLibrary.Logic.Outgoing.EaglePollout.ContinueIteration()
   at EaglePhoneLibrary.Logic.Outgoing.EaglePollout.ContinuePollout(EaglePhoneLibrary.Entities.ConnectionEntity)
   at EaglePhoneLibrary.Logic.Outgoing.EaglePollout+<>c__DisplayClass52.<CallTower>b__4e(System.Threading.Tasks.Task)
   at System.Threading.Tasks.Task+<>c__DisplayClassb.<ContinueWith>b__a(System.Object)
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at System.Threading.Tasks.Task.ExecutionContextCallback(System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
   at System.Threading.Tasks.Task.ExecuteEntry(Boolean)
   at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
これまで、そして今後ともご支援を賜りますよう、よろしくお願い申し上げます。
編集 2: この問題の解決をあきらめました。私の推測では、JulMar がラッパーで作成されている一部の COM オブジェクトを処理する方法に問題があることが原因であると考えられます。私は会社に TraySoft AddTapi .NET のライセンス料を支払うよう説得しましたが、現在は問題なく動作しています....
みんな、ありがとう。