2014-06-18 5 views
1

프로세스가 서비스로 실행 중일 때만 오류 코드 0x80045063 (SPERR_NOT_ACTIVE_SESSION)으로 Speak() 한 후 다음 코드가 실패하는 이유는 무엇입니까?Windows 서비스에서 SAPI를 사용하여 간단한 텍스트로 텍스트 번역

ISpVoicePtr pVoice; 
CoCreateInstance(
    CLSID_SpVoice, 
    0, 
    CLSCTX_INPROC_SERVER, 
    IID_ISpVoice, (LPVOID *) &pVoice 
); 

pVoice->SetOutput(0, TRUE); 
pVoice->Speak(L"Hello", 0, NULL); 

데스크톱 세션과 상호 작용하는 서비스에 대한 보안 변경 사항에 관해 이야기 할 수있는 유일한 자료가 있습니다. .NET에서 다음은 서비스 내에서 작동 할 것이므로 SAPI가 있거나없는 일반 C++를 사용하여 어떻게 수행되는지 궁금합니다.

System::Speech::Synthesis::SpeechSynthesizer synth; 
synth.SetOutputToDefaultAudioDevice(); 
synth.Speak("Hello"); 

답변

2

SAPI 문서는 오디오 출력도 입력이 모두 비활성 콘솔 세션 지원 SPERR_NOT_ACTIVE_SESSION

나열.

서비스는 백그라운드 세션에서 실행됩니다. Vista에 도입 된 Session 0 Isolation으로 인해 서비스는 텍스트 음성 변환을 포함하는 대화 형 리소스에 액세스 할 수 없습니다. 주위에 인터넷 검색을

, 내가 코멘트 부부가 그 주장 백업 발견

http://www.ip-symcon.de/en/service/documentation/module-reference/text-to-speech/tts-speak/

이 기능은 윈도우에서 작동하지 않습니다 __ 비스타/2003__ 이상. 보안상의 이유로 IP-Symcon과 같은 서비스가 시스템의 대화 형 구성 요소에 액세스 할 수 없기 때문입니다. 텍스트 음성 변환 출력은 대화식 구성 요소 인입니다. 이 문제는 다음과 같은 오류 메시지와 함께 나타납니다. __ OLE error 80045063__ MSDN : SPERR_NOT_ACTIVE_SESSION.

가 (나중에) Vista에서 시작 (의도적으로 내 생각)이 물건을 깼다 http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.tapi/2009-06/msg00003.html

참고. 서비스에서 SAPI의 ISpMMSysAudio 인터페이스를 사용하려고하면 (조만간 위 링크의 글 머리 기호로 스케치되므로) 조만간 SPERR_NOT_ACTIVE_SESSION 오류가 표시됩니다. SpeechSynthesizer에 관해서는

, 내 생각은 내부적으로 SAPI 사용하지 않는 것입니다. SpeechSynthesizer의 소스 코드는 여기에 있습니다 :

SpeechSynthesizer.cs

VoiceSynthesis.cs

+0

난 그냥 .NET 및 System.Speech를 사용합니다 나는 그것을 달리 사소한 생각하지 않는. SAPI는 Microsoft.Speech에서 내부적으로 사용됩니다. – hpl