System.Speech在Windows服务中引发“系统上未安装语音或没有可用的当前安全设置的语音”例外

问题描述 投票:1回答:4

老读者,第一次张贴。

我正在C#.Net 3.5中开发Windows服务以执行文本到语音的操作。

我正在使用System.Speech(Microsoft Speech API 3.x)。

我将服务部署到Win2008 x64服​​务器,现在抛出以下异常:

System.InvalidOperationException: No voice installed on the system or none available with the current security setting.
   at System.Speech.Internal.Synthesis.VoiceSynthesis.Speak(Prompt prompt)
   at System.Speech.Synthesis.SpeechSynthesizer.Speak(Prompt prompt)
   at System.Speech.Synthesis.SpeechSynthesizer.Speak(String textToSpeak)

该服务在域帐户下运行。如果我将服务更改为在自己的个人域帐户(具有很高的特权)下运行,则一切运行正常(因此肯定安装了语音[Anna])。因此,我可以肯定这是一个安全问题。

我需要对另一个域帐户进行哪些权限/修改才能使其正常工作?

并且必须是该特定用户,因为它用于MSSQL数据库的Windows身份验证。

提前感谢。

c# windows-services text-to-speech
4个回答
1
投票

简单修复:为运行该服务的同一用户授予对C:\windows\system32\config\systemprofile\appdata\roaming的读/写访问权限。

更多信息:在Windows 10 Framework 4.6.2上测试:Microsoft Speech需要对“ roaming”文件夹具有文件读/写访问权限,以便创建... \ roaming \ Microsoft \ Speech文件夹以在此处存储文件。

如果您的服务用户不是对以下注册表项具有读/写访问权限的组的成员,则可能还需要添加以下权限:

对于以下内容,包括用于32位应用程序的WOW6432Node,对于64位应用程序则保留它,但排除在外

HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ SPEECH \ Voices \ Tokens(VOICE NAME)

示例:HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ SPEECH \ Voices \ Tokens \ TTS_MS_EN-US_DAVID_11.0

和:

HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ SPEECH \ Voices \ Tokens(VOICE NAME)\ Attributes

示例:HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ SPEECH \ Voices \ Tokens \ TTS_MS_EN-US_DAVID_11.0 \ Attributes

您可能需要将这些注册表项的所有者从TrustedInstaller切换到您的用户或管理员组,以进行这些更改

如果您的应用程序在IIS下运行,请为应用程序池用户添加以上权限。


0
投票

在x64操作系统中,这是由AnyCPU构建配置引起的。切换到x86构建配置,它应该可以工作。


0
投票

我退出Visual Studio并在保存后重新打开它,问题已解决。


-1
投票

简单来说,以“管理员”身份运行该应用程序。 ;)

“错误”“以管理员身份运行

© www.soinside.com 2019 - 2024. All rights reserved.