Исключение AccessViolation с TAPI и службой Windows - PullRequest
0 голосов
/ 28 ноября 2011

Я постараюсь сделать это настолько коротким и приятным, насколько это возможно.

Я создал приложение, которое используется моей компанией для вызова около 2000 различных телефонных номеров каждый день (используется для связи с очень старымиустройства, которые мы развернули в США), когда я запускаю приложение как приложение Windows (написанное с использованием C # и обертки JulMar ITAPI3), приложение работает без проблем, что говорит мне о том, что мой код в основном прав ....

Проблема, с которой я сталкиваюсь, заключается в том, что я запускаю тот же код, что и служба Windows (создайте новый проект и просто позвоните в библиотеку телефонного набора, как это делает приложение Windows). Служба будет работать в течение некоторого периода времени.(меняется каждый раз) и затем, наконец, вылетает.Я смотрю на журнал событий и вижу, что это AccessViolation (0xc0000005) в приложении.У меня есть попытка перехватить мой вызов в оболочке тапи, где происходит исключение, но перехват не срабатывает, я предполагаю, что приложение просто вылетает, прежде чем оно может вернуться к этой точке.

Так что вВ двух словах, приложение Tapi прекрасно работает при запуске в качестве приложения Windows, но при запуске в качестве службы Windows (работающей в локальной системе) в конечном итоге происходит сбой с ошибкой AccessViolation, которая не обнаруживается при попытке «перехватить» вызов функции «оскорбление».

Есть мысли?

Это работает на Windows Server 2008, если это помогает.

РЕДАКТИРОВАТЬ 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, и теперь она работает отлично ...

Спасибо всем.

1 Ответ

0 голосов
/ 29 ноября 2011

Когда у нас были приложения TAPI, работающие в качестве службы, они всегда запускались как отдельный пользователь, а не как LocalSystem, из-за использования TAPI пользовательских настроек телефона (правила набора номера и т. Д.).

Возможно, TAPI пытается получить доступ к одному из этих параметров, но не может этого сделать, поскольку профиль пользователя для LocalSystem не был настроен.

...