1

良い一日、

VB.Net Speech Recognition Application から Windows Speech Training を開始する方法の例を見つけるために、インターネットを精力的に検索しました。

私は自分の命を救うために働くことができないいくつかの例を見つけました.

そのような例の 1 つは、Visual Studios Fourms にあります。

ここ

この特定の例では、「Process.Start」呼び出しを使用して、スピーチ トレーニング セッションを開始しようとしています。しかし、これは私にはうまくいきません。そのスレッドの例は次のとおりです。

    Process.Start("rundll32.exe", "C:\Windows\system32\speech\speechux\SpeechUX.dll, RunWizard UserTraining")

何が起こるかというと、次のエラーが表示されます。

       There was a problem starting

      C:\Windows\system32\speech\speechux\SpeechUX.dll

      The specified module could not be found

そこで、ショートカット (.lnk) ファイルを作成してみましたが、この方法で DLL にアクセスできると思いました。私のショートカットの種類は同じことをします。ショートカットでは、パラメーターを指定して「rundll32.exe」を呼び出します。

          C:\Windows\System32\rundll32.exe "C:\Windows\system32\speech\speechux\SpeechUX.dll" RunWizard UserTraining 

次に、VB.Net アプリケーションで「Process.Start」を使用し、ショートカットを実行しようとしました。

これでも同じエラーが発生します。ただし、ショートカット自体は Speech Training セッションを開始します。変?!?

そこで、さらに一歩進んで、VB.Net アプリケーションと「Process.Start」呼び出しに関係があるかどうかを確認しました。

VBScript を作成し、「Wscript.Shell」を使用してショートカットを指定します。

VBScript を実行すると、Shortcut と low が呼び出され、Speech Training が開始されます。

すごい!しかし...

VB.net アプリケーションから VBscript を実行しようとすると、そのエラーが再び発生します。

ここで一体何が起こっているのですか?

4

2 に答える 2

1

あなたの問題は、プログラムが 32 ビットとしてコンパイルされ、OS が 64 ビットであるため、プログラムから「C:\Windows\System32\Speech\SpeechUX\SpeechUX.dll」にアクセスしようとすると、 '実際には "C:\Windows\SysWOW64\Speech\SpeechUX\SpeechUX.dll" にアクセスしていますが、rundll32.exe が報告しているように存在しません。

代わりにプログラムを 64 ビットとしてコンパイルするか、疑似ディレクトリ %SystemRoot%\sysnative を試してください。

また、rundll32.exe の代わりに、引数を指定して SpeechUXWiz.exe を実行することもできます。

例えば。

private Process StartSpeechMicrophoneTraining()
{
    Process process = new Process();
    process.StartInfo.FileName = System.IO.Path.Combine(Environment.SystemDirectory, "speech\\speechux\\SpeechUXWiz.exe");
    process.StartInfo.Arguments = "MicTraining";
    process.Start();
    return process;
}

private Process StartSpeechUserTraining()
{
    Process process = new Process();
    process.StartInfo.FileName = System.IO.Path.Combine(Environment.SystemDirectory, "speech\\speechux\\SpeechUXWiz.exe");
    process.StartInfo.Arguments = "UserTraining";
    process.Start();
    return process;
}

それが役立つことを願っています。

http://en.wikipedia.org/wiki/WoW64で Windows 64 ビット上の Windows 32 ビットの詳細を読むか、具体的にはhttp://en.wikipedia.org/wiki/WoW64#Registry_and_file_system で問題を確認してください。

于 2013-12-30T13:21:11.040 に答える
1

64 ビット OS を使用していて、system32 フォルダーにアクセスする場合は、ディレクトリ エイリアス名 (「sysnative」) を使用する必要があります。

「C:\windows\sysnative」を使用すると、system32 フォルダーとそのすべての内容にアクセスできます。

正直なところ、マイクロソフトでこれを決めたのはばかげています!!

于 2014-04-21T16:46:23.090 に答える