2012-07-23 26 views
1

我已購買AddTapi.NET許可證,以簡化在作爲Windows服務運行的產品中使用TAPI的開發。我能夠在Windows GUI和控制檯應用程序中使用TAPI,並將代碼移植到我的Windows服務中。此時,我注意到使用TapiCall.Speak或TapiCall.Play(wavefile)等語音API的代碼在電話線上沒有發出聲音,並且保持沉默。在Windows服務中使用TAPI語音

有幾個以前的問題可能與我的問題有關。

Question: Playing Voice over a modem from a Windows service表示使用語音,是由Windows服務產卵一個GUI線程解決的問題。我試圖做到這一點,但未能通過電話聽到演講。

Question: Access violation with Tapi in Windows service似乎表明與TAPI在服務的最初的問題還沒有被使用AddTapi產品得到解決。該票沒有明確提到使用語音API的,但(SAPI)

我使用Visual Studio 2010和.NET 4.0的C#編程。我試圖在Windows 7上運行它。我收到了來自AddTapi的一封電子郵件,其中指出微軟在Win 2008 Server,Windows Vista和Windows 7中更改了安全性以禁止使用語音子系統。上述文章似乎表明一些成功與AddTapi,雖然它可能不在Windows 7上。

鑑於我正在使用的主系統是Windows服務(和子進程),看起來似乎是最好的方法讓演講工作。如果我將SAPI代碼放在控制檯應用程序中,我希望在不需要用戶主動登錄計算機的情況下對其進行管理。關於我的TAPI代碼沒有任何圖形。我應該採取類似於Article: Launching an interactive process的方法併產生一個交互過程嗎?在Windows服務中是否有使用TAPI語音的成功案例?

回答

0

我與您的項目具有相同的要求(使用AddTapi.NET的Windows服務中的TAPI)。我也收到了同樣的迴應。我嘗試了一些其他帖子推薦我在一個單獨的線程中運行應用程序,所以我工具我的整個解決方案,並將其轉換爲WPF應用程序與一個簡單的頁面,永遠不會出現,但所有的AddTapi配置發生在構造函數。

NO SUCCESS。

從WPF應用程序運行時,但是當WPF頁面中啓用STAThread螺紋間隙被實例化和說話仍然是行不通的應用程序將運行正常。我一直在尋找答案,但除此之外別無其他,說沒有解決方案(沒有真正的解決方案)。

通過一個單獨的進程運行我的應用程序根本不會削減它,因爲在一個單獨的線程中運行將無法正常工作,否則我將不得不考慮運行此應用程序作爲一個常規的Windows應用程序(將需要登錄) 。

希望我有一個解決方案,對不起。

+0

看了一兩個星期後,我嘗試使用Windows任務計劃程序將我的Windows服務作爲任務移動。這使我可以控制啓動和停止應用程序。很明顯,當我使用'運行用戶是否登錄'配置任務時,即使用戶登錄時,我的任務中的SAPI也不起作用。當我將設置更改爲「僅在用戶登錄時運行」時,我的計劃任務通常與SAPI Play和Speak選項一起工作。儘管不希望用戶始終登錄,但它似乎是目前唯一的解決方案。 – 2012-08-10 18:19:28

1

我們在AddTapi.NET 5.0中解決了這個問題。 5.0版可以在Windows服務應用程序中使用Speech API(TapiCall.Speak和TapiCall.Play)。無需使用單獨的進程,並且該服務可以在默認的本地服務帳戶下運行。

大家誰不使用AddTapi.NET,關鍵是要利用SAPI5 SpVoice對象說話的自定義數據流。您無法在Windows服務中實例化SpAudio或SpMMAudioOut對象,因此您需要實現自己的流類並將SpVoice的輸出設置爲該流。