Программно определить, установлен ли проигрыватель Windows Media

У кого-нибудь есть какие-либо советы о том, как программно определить, установлен ли проигрыватель Windows Media?

Я знаю о поиске в реестре, но не доверяю ему, так как он немного вводит в заблуждение (удаленный может не удалить его). И я думал просто запустить видео, но ошибка может быть вызвана тем, что не установлен медиаплеер, что-то другое, так что это тоже не окончательно.

В идеале я бы предпочел решение, которое можно было бы использовать как из моего приложения C++, так и из моего установщика NSIS. Но мое приложение C++ является самым важным, я готов жить с взломом реестра в установщике.


person John MacIntyre    schedule 27.10.2010    source источник


Ответы (3)


Посмотрите на значение IsInstalled под ключом HKLM\Software\Microsoft\Active Setup\Installed Components\{22d6f312-b0f6-11d0-94ab-0080c74c7e95}. Это 1, если установлено, 0 в противном случае.

См. раздел Обнаружение проигрывателя Windows Media из приложения.

person Vantomex    schedule 27.10.2010
comment
Это потрясающе, но документировано ли где-нибудь, что это значение фактически установлено на 0 при удалении? - person John MacIntyre; 27.10.2010
comment
Я когда-либо тестировал удаление WMP 9 на моей виртуальной машине, и действительно IsInstalled было установлено значение 0. Поскольку год документации MSDN - 2010, я уверен, что это ведет себя так же, по крайней мере, до WMP 12. - person Vantomex; 28.10.2010

(Вы не говорите, проверяете ли вы встраиваемый (т. е. OCX) проигрыватель для встраивания в ваше приложение или EXE для внешнего запуска из вашего приложения.)

Как насчет проверки HRESULT на CoCreateInstance по CLSID {22d6f312-b0f6-11d0-94ab-0080c74c7e95}/ProgID «MediaPlayer.MediaPlayer.1» в вашем приложении? (CLSID из http://technet.microsoft.com/en-us/library/bb676121.aspx)

В вашем установщике просто проверьте HKEY_CLASSES_ROOT\CLSID{22D6F312-B0F6-11D0-94AB-0080C74C7E95} и, возможно, также наличие пути в подразделе InprocServer32.

person Duncan Smart    schedule 27.10.2010

Если при удалении не удается удалить ни EXE, ни запись реестра, то я очень сомневаюсь, что оно что-либо удалило...

Итак, я бы посоветовал вам проверить реестр в HKLM\Software\Microsoft\MediaPlayer\ и, если он существует, взять значение Installation Directory или Installation DirectoryLFN (по умолчанию %ProgramFiles%\Windows Media Player) и проверить, что wmplayer.exe существует в этом каталоге. Если это так, вы будете знать, что WMP установлен.

person bradenb    schedule 27.10.2010
comment
Мне нравится эта идея проверки установленного приложения через путь в реестре. +1 - person John MacIntyre; 27.10.2010