美好的一天,
我在网上不知疲倦地试图找到一个如何在我的VB.Net语音识别应用程序中启动Windows语音训练的例子。
我找到了几个例子,我无法挽救我的生命。
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培训课程。奇怪?!?
所以,我接着又向前迈了一步,看看它是否与我的VB.Net应用程序和“Process.Start”调用有关。
我创建了一个VBScript,并使用“Wscript.Shell”我指向快捷方式。
运行VBScript调用快捷方式,然后低,看看语音训练开始了!
大!但...
当我尝试从VB.net应用程序运行VBscript时,我再次收到该错误。
这到底是怎么回事?
答案 0 :(得分:1)
您的问题可能是您的程序编译为32位且您的操作系统是64位,因此,当您尝试从您的“C:\ Windows \ System32 \ Speech \ SpeechUX \ SpeechUX.dll”访问时程序,你真的访问“C:\ Windows \ SysWOW64 \ Speech \ SpeechUX \ SpeechUX.dll”,因为rundll32.exe报告不存在。
将程序编译为64位,或者尝试伪目录%SystemRoot%\ sysnative。
此外,您可能只想运行带有参数的SpeechUXWiz.exe而不是rundll32.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
答案 1 :(得分:1)
如果您使用的是64位操作系统并且想要访问system32文件夹,则必须使用目录别名,即“sysnative”。
“C:\ windows \ sysnative”将允许您访问system32文件夹及其所有内容。
老实说,谁在微软决定这个只是愚蠢!!