启动Windows录音机应用程序

时间:2013-05-31 11:59:31

标签: c# winforms c++-cli

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

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位兼容性问题。

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

1 个答案:

答案 0 :(得分:0)

引用您的C ++ / CLI代码:

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

引用您的C#代码:

Process.Start("soundrecorder");
                          ^^

指定“soundrecord”不起作用,因为它被称为“soundrecord er

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

我建议您使用等效的C#命令:Windows具有搜索可执行文件路径的功能,让它这样做。当MS决定移动它时,对完整路径进行硬编码将在未来产生兼容性问题。

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