Windows媒体播放器的注册表键路径

时间:2014-03-11 12:26:22

标签: c# media windows-media-player

我正试图通过我的代码在Windows媒体播放器中播放视频。路径是:

 C:\Program Files (x86)\Windows Media Player\wmplayer.exe

如果我硬编码,

      string filePath = System.IO.Path.Combine (Application.streamingAssetsPath, "Demo.mp4");
      Process proc = new Process();
      proc.StartInfo.FileName = @"C:\Program Files (x86)\Windows Media Player\wmplayer.exe";
        proc.StartInfo.Arguments = "\"" + filePath + "\"";
        proc.Start ();

我可以播放视频。但我想使用所有机器通用的路径。因此,在浏览此链接Programmatically detect if Windows Media Player is installed之后,我将代码重新编写为:

     private string makePath;
RegistryKey myKey;
     makePath = @"HKLM\Software\Microsoft\Active Setup\Installed Components\{22d6f312-b0f6-11d0-94ab-0080c74c7e95}";
     myKey = Registry.LocalMachine.OpenSubKey (makePath);

     IEnumerator Example ()
{
    if (myKey == null) {
        print ("No Windows Media Player Installed");
    } else {
        proc.StartInfo.FileName = makePath;
        proc.StartInfo.Arguments = "\"" + filePath + "\"";
        proc.Start ();
    }

并在某处调用此函数但是myKey似乎为null。我在这里提到的路径是否正确或者为了播放视频需要做些什么?

2 个答案:

答案 0 :(得分:2)

您找不到该注册表项的原因是您在64位系统上运行32位进程。所以registry redirector开始发挥作用。代码将尝试解析Wow6432Node下的注册表项。

使用RegistryView枚举指定要查看注册表的64位视图来解决问题。或者以64位进程运行。

FWIW,让shell决定(使用用户的文件关联)用于播放视频的程序可能更简单。

答案 1 :(得分:0)

在64位Windows上,部分注册表项针对32位应用程序和64位应用程序单独存储,并使用registry redirectorregistry reflection映射到单独的逻辑注册表视图中,因为64位版本的应用程序可能使用与32位版本不同的注册表项和值。

以下是如何访问注册表的32位视图的示例。 指定在64位操作系统上使用RegistryView.

定位的注册表视图

使用此

var view32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
                                     RegistryView.Registry32);
using (var clsid32 = view32.OpenSubKey(@"Software\Microsoft\Active Setup\Installed Components\{22d6f312-b0f6-11d0-94ab-0080c74c7e95\}", false))
{
  // actually accessing Wow6432Node 
}