在Speechlib中从HRESULT:0x8004503A获取异常

本文关键字:0x8004503A 获取 异常 HRESULT Speechlib 中从 | 更新日期: 2023-09-27 18:25:49

我已经使用Speechlib SpVoice创建了一个文本到语音的应用程序。它与windows应用程序配合良好。

但当我使用相同的代码创建windows服务时。它给了我这个错误

System.Runtime.InteropServices.COMException(0x8004503A):异常来自SpeechLib.ISpeechVoice.Speak 上的HRESULT:0x8004503A

这是我的代码

 public partial class LEDPlayService : ServiceBase
    {
        static int MessageID = 0;
        static SpeechLib.SpVoice VoiceObj = new SpeechLib.SpVoice();
        static System.Timers.Timer myTimer = new System.Timers.Timer();
        protected override void OnStart(string[] args)
         {
            myTimer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
            //This statement is used to set interval to 1 minute (= 60,000 milliseconds)
            myTimer.Interval = 60* 1000;
            // enabling the timer
            myTimer.Enabled = true; ;
            myTimer.AutoReset = false;
        }
        private static void OnElapsedTime(object source, ElapsedEventArgs e)
        {
            ((System.Timers.Timer)source).Stop();
            myTimer.Enabled = false; ;
            bool result =PlayAudio("Hello prithvi");
            ((System.Timers.Timer)source).Start();
            myTimer.Enabled = true;
            // TraceService(""+DateTime.Now.TimeOfDay);
        }
        public static bool PlayAudio(string text)
        {
          bool res = false;
            try
            {
                VoiceObj.Speak(text, SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault);
                res = true;
            }
            catch(Exception e)
            {
                TraceService("error in sound........."+e.InnerException+e.Message+"   "+e.ToString());
                res = false;
            }
            return res;
        }
    }

请帮帮我。

在Speechlib中从HRESULT:0x8004503A获取异常

这是由SAPI调用SPERR_NOT_FOUND返回的低级错误。如果不发布异常的代码段和堆栈跟踪,那么就很难可靠地回答这个问题。或者你是如何观察到的,这些COM错误通常被转换为.NET异常。

错误代码只不过是"找不到完成工作所需的内容"。通话上下文应该让我们清楚地了解可能缺少的内容,但我们看不到这一点。让这些代码在服务中运行是一种暗示。运行此服务的用户帐户很重要,注册表中存储了许多System.Speech的配置,服务将很难找到存储在HKCU而不是HKLM中的配置。例如,如果你购买了一个语音并注册了它,这并不罕见。而且它可能很难找到硬件,比如麦克风或扬声器。

因此,首先要尝试的是将服务配置为使用特定的用户帐户(如您的帐户)而不是默认的系统帐户运行。接下来要尝试的是使用SysInternals的进程监视器,您将看到您的程序在注册表中搜索注册表项。将一个好的跟踪(将其作为桌面程序运行时得到的跟踪)与从服务运行时获得的跟踪进行比较。并用所需信息更新您的问题,以获得更好的答案。