【问题标题】:C# - detect if windows features are turned on (particularly Windows Media Player)C# - 检测是否打开了 Windows 功能(尤其是 Windows Media Player)
【发布时间】:2019-11-04 12:02:27
【问题描述】:

某些 Windows 功能是可选的,用户可以决定是否要关闭或打开这些功能。 其中之一是 Windows Media Player 组件(如此处所述http://support.overwolf.com/knowledge-base/enabling-windows-media-player/

有没有办法在代码中找出当前是否安装了它? 感谢您的帮助!

【问题讨论】:

  • Get-WmiObject Win32_OptionalFeature | Select Name, Caption in Powershell 将列出功能,包括可用时的 WindowsMediaPlayer
  • try/catch 无所不能。如果 WMP 对程序至关重要,那么不要使用 try/catch。相反,专注于提供良好的终止消息,为 AppDomain.UnhandledException 编写事件处理程序绝不是可选的。韩国人对此非常了解,并且知道该怎么做。
  • @HansPassant 不,重要的不是 Windows 媒体播放器本身。它是允许在 .NET 中使用某些库的 Windows 媒体功能。如果未安装这些功能,则代码可以正常工作,但不会播放声音。所以 try/catch 不行。
  • @RomanR。谢谢。这也可能起到作用。我现在将坚持进行注册表检查。如果这个解决方案不能 100% 起作用,我会试试你的。

标签: .net windows-media-player


【解决方案1】:

我尝试了在打开和未打开这些功能的情况下比较注册表项的方法。有许多键,可能同样足以检查。 这些是最重要的:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\wmplayer.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\wmplayer.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AMOVIE.ActiveMovie Control
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMPlayer.OCX
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaPlayer.MediaPlayer

所以实际的 C# 代码应该是这样的

bool windowMediaPlayerAvailable = (Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\MediaPlayer.MediaPlayer") != null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多