2011-08-11 27 views

答えて

1

このエラーは、アプリケーションがSpeechSynthesizerで使用する音声にアクセスできない場合に発生します。最初に考えられる原因は、システムにインストールされている音声がないことです。オッズは、これは問題ではありませんですが、あなたは、次のコードビットのような何か実行して、まだダブルチェックする必要があります

SpeechSynthesizer ssTest = new SpeechSynthesizer(); 
System.Diagnostics.Debug.WriteLine(ssTest.GetInstalledVoices().Count); 

上記と仮定すると、問題はおそらく、より複雑な問題であり、0よりも数値が高いほど返しますアプリケーションのセキュリティ設定を使用します。

SetOutputToWaveFileを含むSpeechSynthesizerクラスのいくつかのメソッドでは、直接呼び出し元を完全に信頼する必要があります。これはデスクトップアプリケーション(SpeechSynthesizerクラスが設計されている可能性が高い)にとって大きな問題ではないかもしれませんが、Web環境ではより深刻なセキュリティへの影響があります。したがって、IISの既定の設定では、アプリケーションが部分的に信頼されます。これを変更するにはいくつかの方法がありますが、最も迅速で確実に最も汚い方法は、デフォルトからLocalSystemアカウントのような管理者権限を持つアカウントへのswitching the application pool'sのIDです。

重複していますが、これはアプリケーションのセキュリティに重大な影響を及ぼすため、実装する前に完全に調査する必要があります。

+0

は、ローカルシステム、無ダイスにアプリケーションプールをスイッチ。これはユーザー権限の問題ではなく、実行コンテキストの信頼に関連しているようです。上に貼り付けたコードを実行するコンソールアプリケーションは、ネットワークドライブのエラー(私のユーザー、部分的な信頼の実行)から実行されますが、ローカルで正しく動作します(私のユーザー、完全な信頼の実行)。それはユーザの問題ではなく、実行コンテキストの信頼の問題です.Dev WebサーバやIISの変更方法はわかりません... –

+0

@JimmyHoffaセキュリティモデルはコンソールアプリケーションの場合と少し違って処理されるため、完璧なテストケースではありません。コンソールアプリ[ここ](http://stackoverflow.com/q/4827670/113343)にも同様の質問があります。 Webアプリケーションに問題が残っている場合は、[ここ](http://stackoverflow.com/a/10220416/113343)のようにweb.configのように完全な信頼を与えることができます。 – sglantz

+0

LocalSystem IDを使用するようにアプリケーションプールを変更すると、私のために働きました。私はこれのセキュリティの影響を十分に研究していないので、これが最終的な解決策になるかどうかはわかりませんが、今のところ私はうまくいきます。 – user3308241

0

単純な修正:アプリケーションプールが実行されているのと同じユーザーのC:\windows\system32\config\systemprofile\appdata\roamingへの読み取り/書き込みアクセスを許可します。

-1

単に「管理者」としてアプリを実行してください。 ;)

error

run as administrator
関連する問題