Использование речи TAPI в службе Windows

Я приобрел лицензию AddTapi.NET, чтобы упростить разработку с использованием TAPI в продукте, работающем как служба Windows. Я смог использовать TAPI в графическом интерфейсе и консольном приложении Windows и перенес код в свою службу Windows. В этот момент я заметил, что код, который использует речевой API, такой как TapiCall.Speak или TapiCall.Play (wavefile), не генерирует звук на телефонной линии и молчит.

Есть несколько предыдущих вопросов, которые могут относиться к моей проблеме.

Вопрос: воспроизведение голоса через модем из службы Windows указано проблема с использованием речи, которая была решена путем создания потока графического интерфейса в службе Windows. Я попытался это сделать, но мне не удалось добиться того, чтобы речь была услышана по телефону.

Вопрос: Нарушение прав доступа с помощью Tapi в службе Windows указывает на первоначальный проблема с TAPI в сервисе пока решена с помощью продукта AddTapi. Однако в билете явно не упоминается использование речевого API (SAPI).

Я программирую на С#, используя Visual Studio 2010 и .NET 4.0. Я пытаюсь заставить это работать в Windows 7. Я получил электронное письмо от AddTapi, в котором указывалось, что Microsoft изменила систему безопасности, чтобы запретить использование голосовой подсистемы из служб в Win 2008 Server, Windows Vista и Windows 7. Вышеупомянутое статьи, кажется, указывают на некоторый успех с AddTapi, хотя это может быть не в Windows 7.

Учитывая, что основная система, с которой я работаю, является службой Windows (и дочерними процессами), что может показаться лучшим подходом к тому, чтобы заставить речь работать. Если я помещу код SAPI в консольное приложение, я бы хотел, чтобы этим управляли, не требуя от пользователя активного входа в систему на компьютере. В моем коде TAPI нет ничего графического. Должен ли я использовать подход, аналогичный Статья: Запуск интерактивного процесса и создание интерактивного процесса? Были ли какие-либо истории успеха при использовании речи TAPI в службе Windows?


person Brian C    schedule 23.07.2012    source источник


Ответы (2)


Мы решили эту проблему в AddTapi.NET 5.0. Версия 5.0 может использовать Speech API (TapiCall.Speak и TapiCall.Play) в служебных приложениях Windows. Нет необходимости использовать отдельный процесс, и служба может работать под учетной записью локальной службы по умолчанию.

Для всех, кто не использует AddTapi.NET, ключевым моментом является использование объекта SAPI5 SpVoice, говорящего с пользовательским потоком. Вы не можете создавать экземпляры объектов SpAudio или SpMMAudioOut в службе Windows, поэтому вам нужно будет реализовать свой собственный класс потока и установить вывод SpVoice для этого потока.

person Michael Rakita - Traysoft    schedule 22.11.2014

У меня были те же требования, что и у вашего проекта (TAPI в службе Windows с использованием AddTapi.NET). Я тоже получил такой же ответ. Я попробовал некоторые другие сообщения, рекомендуя запускать приложение в отдельном потоке, поэтому я обработал все свое решение и преобразовал его в приложение WPF с простой страницей, которая никогда не появится, но вся конфигурация AddTapi происходит в конструкторе .

НЕТ УСПЕХА.

Приложение будет работать нормально при запуске из приложения WPF, но когда страница WPF будет создана в потоке с поддержкой STAThread, Play и Speak по-прежнему не будут работать. Я все время искал ответ на этот вопрос, но нет ничего, кроме других, утверждающих, что на самом деле нет решения (нет реального решения).

Запуск моего приложения через отдельный процесс просто не сократит его, и, поскольку запуск в отдельном потоке не будет работать, мне придется рассмотреть возможность запуска этого приложения как обычного приложения Windows (потребуется вход в систему).

Жаль, что у меня не было решения, извините.

person Edgar H    schedule 31.07.2012
comment
После недели или двух просмотра этого я попытался переместить свою службу Windows как задачу с помощью планировщика задач Windows. Это дало мне некоторый контроль над запуском и остановкой приложения. Довольно показательно, что SAPI в моей задаче не будет работать, когда я настрою задачу с «Выполнять независимо от того, вошел ли пользователь в систему или нет», даже когда пользователь вошел в систему. Когда я изменил настройку на «Выполнять только при входе пользователя в систему», моя запланированная задача нормально работала с параметрами SAPI Play и Speak. Хотя нежелательно, чтобы пользователь всегда входил в систему, на данный момент это кажется единственным решением. - person Brian C; 10.08.2012