Мое приложение получает AccessViolationException
при вызове конструктора по умолчанию класса Windows.Media.SpeechSynthesis.SpeechSynthesizer
. Это происходит только на одной конкретной машине (по крайней мере, до сих пор), которая представляет собой Surface Pro 3 под управлением Windows 8.1. Все остальные машины с установленным приложением не испытывают этой проблемы.AccessViolationException в Windows.Media.SpeechSynthesis.SpeechSynthesizer constructor
Мой код-то вроде этого:
class Speech
{
private Windows.Media.SpeechSynthesis.SpeechSynthesizer _Synthesizer;
public Speech()
{
SetVoice();
}
private void SetVoice()
{
try
{
// Exception is raised here
_Synthesizer = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
}
catch (Exception e)
{
}
}
}
трассировка стека, который появляется в журналах событий выглядит следующим образом:
Description: The process was terminated due to an unhandled exception
Exception Info: System.AccessViolationException
Stack:
at Windows.Media.SpeechSynthesis.SpeechSynthesizer..ctor()
at ... Speech.SetVoice()
at ... Speech..ctor()
Я захватил файл дампа с помощью ProcDump и можете увидеть это в стеке (он не показывает «мой код» только код после него):
sapi.dll!CSpObjectTokenEnumBuilder::CheckTokenSignature(struct ISpDataKey *) Unknown
sapi.dll!CSpObjectTokenEnumBuilder::AddTokensFromDataKey(struct ISpDataKey *,unsigned short const *,unsigned short const *) Unknown
sapi.dll!CSpObjectTokenCategory::InternalEnumTokens(unsigned short const *,unsigned short const *,struct IEnumSpObjectTokens * *,int) Unknown
sapi.dll!CSpObjectTokenCategory::EnumTokens(unsigned short const *,unsigned short const *,struct IEnumSpObjectTokens * *) Unknown
Windows.Media.SpeechSynthesis.dll!SpEnumTokens(unsigned short const *,unsigned short const *,unsigned short const *,struct IEnumSpObjectTokens * *) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::InstalledVoicesStatic::get_AllVoices(struct Windows::Foundation::Collections::IVectorView<class Windows::Media::SpeechSynthesis::VoiceInformation *> * *) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::InstalledVoicesStatic::get_DefaultVoiceWithRank(struct Windows::Media::SpeechSynthesis::IVoiceInformation * *,unsigned int *) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::CSpeechSynthesizer::GetDefaultVoice(struct Windows::Media::SpeechSynthesis::IVoiceInformation * *,unsigned int *) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::CSpeechSynthesizer::CreateSynthesizerObject(void) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::CSpeechSynthesizer::RuntimeClassInitialize(void) Unknown
Windows.Media.SpeechSynthesis.dll!Microsoft::WRL::Details::MakeAndInitialize<class Windows::Media::SpeechSynthesis::CSpeechSynthesizer,class Windows::Media::SpeechSynthesis::CSpeechSynthesizer>(class Windows::Media::SpeechSynthesis::CSpeechSynthesizer * *) Unknown
Windows.Media.SpeechSynthesis.dll!Windows::Media::SpeechSynthesis::InstalledVoicesStatic::ActivateInstance(struct IInspectable * *) Unknown
Его реальный Странно, что ошибка, похоже, ускользает от блока try/catch. Это только на машине одного клиента
Любые идеи, что происходит?
Хорошая мысль. Я проверю это. – Tim
Я взял экспорт частей реестра HKLM \ Software \ Microsoft \ Speech' и 'HKCU \ Software \ Microsoft \ Speech'. 'HKLM' идентичен на проблемной машине и моей локальной машине. 'HKCU' отличается, но я не могу сказать, что что-то повреждено. В 'HKCU' нет' Voices \ Tokens'. Мысли? – Tim
Чтобы прояснить мой комментарий, в «HKLM» (нет в «HKCM») есть три токена голоса, и они являются теми же тремя, что и на других системах (David, Hazel, Zira) со всеми одинаковыми точными значениями (проверено с помощью WinDiff экспорта .reg из двух разных систем). – Tim