2014-03-11 5 views
0

Я пытаюсь воспроизвести видео в Windows Media Player через свой код. Путь:Путь ключа реестра для Windows Media Player в C#

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, как представляется, быть пустым. Правильный ли путь, который я упомянул здесь, или что нужно сделать, чтобы воспроизвести видео?

+1

Почему вы не позволяете оболочка решить, какой игрок использовать? –

+0

попробуйте использовать Environment.GetFolderPath и получить папку с программными файлами через перечисление SpecialFolders. Это гарантирует, что путь всегда корректен на машине, на которой запущено приложение, поскольку некоторые из них могут быть 32-разрядными ОС и другими 64-разрядными ОС. Я также согласен с @DavidHeffernan о том, чтобы позволить Shell решить, какой игрок использовать. –

ответ

2

Причина, по которой вы не можете найти этот раздел реестра, заключается в том, что вы используете 32-битный процесс в 64-разрядной системе. И так вступает в игру registry redirector. Код попытается разрешить раздел реестра под номером Wow6432Node.

Решение проблемы с помощью перечисления RegistryView, чтобы указать, что вы хотите посмотреть в 64-битном представлении реестра. Или выполните 64-битный процесс.

FWIW, проще всего позволить оболочке решить (используя ассоциации пользователей), какую программу использовать для воспроизведения видео.

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 
} 
+0

В этом ответе отсутствует объяснение того, что происходит. Он также использует HKCU, а не HKLM. –

Смежные вопросы