我正试图通过我的代码在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。我在这里提到的路径是否正确或者为了播放视频需要做些什么?
答案 0 :(得分:2)
您找不到该注册表项的原因是您在64位系统上运行32位进程。所以registry redirector开始发挥作用。代码将尝试解析Wow6432Node
下的注册表项。
使用RegistryView
枚举指定要查看注册表的64位视图来解决问题。或者以64位进程运行。
FWIW,让shell决定(使用用户的文件关联)用于播放视频的程序可能更简单。
答案 1 :(得分:0)
在64位Windows上,部分注册表项针对32位应用程序和64位应用程序单独存储,并使用registry redirector和registry 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
}