2013-05-31 70 views
0

我想在Winforms应用程序(C++/cli)中启动默认Windows声音记录。在“运行”对话框中,Vista/7的命令是“soundrecorder”。于是我开始用最简单的方法:启动Windows录音机应用程序

System::Diagnostics::Process::Start("soundrecorder"); 

,但它抛出一个System.ComponentModel.Win32Exception(消息:该系统找不到指定文件)。所以我用真正的道路:

String^ path = Environment::GetFolderPath(Environment::SpecialFolder::System); 
path = System::IO::Path::Combine(path, "soundrecorder.exe"); 
System::Diagnostics::Process::Start(path); 

相同的结果。硬编码完整路径也会失败。任何其他命令(如“mspaint”)都可以正确运行。

我认为问题出在我的环境/当前用户/机器上。然后我在C#编写一个愚蠢的程序:

public abstract class StupidProgram{ 
    public static void Main(string[] args) 
    { 
    Process.Start("soundrecorder"); 
    } 
} 

它的工作原理,甚至更多:如果我从我的应用程序运行“StupidProgram.exe”,它也能工作。

该应用程序以C++/CLI编码为32位程序。我正在使用Windows 7 64位。我在Windows 7 32位上测试了该应用程序并且它可以正常工作,因此它可以解决32/64位兼容性问题。

你对这种行为有什么想法吗?

+0

此例外有一条消息和一个错误代码。也许你可以看到实际上出了什么问题。 – nvoigt

+0

对我来说似乎是一个路径问题,虽然c#已经变得更加智能化,编译器也很适合c#编写的代码 –

回答

0

引述你的C++/CLI代码:

System::Diagnostics::Process::Start("soundrecord"); 

引用您的C#代码:

Process.Start("soundrecorder"); 
          ^^ 

指定 “soundrecord” 是不行的,因为它被称为 “soundrecord ER

没有确切的异常文本,我认为指定完整路径不起作用,因为您的应用程序正在编译为x86,并且您正在运行g 64位Windows,而操作系统正在进行文件系统重定向。

我建议您使用与C#命令等效的命令:Windows具有搜索可执行文件路径的功能,让它执行此操作。当MS决定移动它时,硬编码完整路径将给未来带来兼容性问题。

System::Diagnostics::Process::Start("soundrecorder"); 
               ^^ 
+0

非常感谢David,David。问题是32/64位操作系统重定向。我发现了一个[post](http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/cfdf4474-266b-4ef5-8992-7fbdc3147521/),它有关于64位操作系统重定向的简要说明和一个解决方法。我改进了我的问题以备将来使用。 – Jairo

相关问题