使用“rundll32.exe”访问SpeechUX.dll

时间:2013-06-08 14:33:35

标签: rundll32

美好的一天,

我在网上不知疲倦地试图找到一个如何在我的VB.Net语音识别应用程序中启动Windows语音训练的例子。

我找到了几个例子,我无法挽救我的生命。

Visual Studios Fourms就是一个这样的例子:

HERE

此特定示例使用“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时,我再次收到该错误。

这到底是怎么回事?

2 个答案:

答案 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文件夹及其所有内容。

老实说,谁在微软决定这个只是愚蠢!!