我想在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位兼容性问题。
你对这种行为有什么想法吗?
此例外有一条消息和一个错误代码。也许你可以看到实际上出了什么问题。 – nvoigt
对我来说似乎是一个路径问题,虽然c#已经变得更加智能化,编译器也很适合c#编写的代码 –