老读者,第一次张贴。
我正在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\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下运行,请为应用程序池用户添加以上权限。
在x64操作系统中,这是由AnyCPU构建配置引起的。切换到x86构建配置,它应该可以工作。
我退出Visual Studio并在保存后重新打开它,问题已解决。
简单来说,以“管理员”身份运行该应用程序。 ;)