Win32_InstalledProgramFramework无数据返回问题求助
问题描述
根据文档,自Windows 7起系统应提供Win32_InstalledProgramFramework类,可通过Win32_InstalledWin32Program返回的ProgramID获取程序依赖的框架(如Visual C++、Java、.NET等)。但在Parallels上的最新Win11 ARM版本(基于Mac M2开发)环境中,已确认WMI命名空间存在该类,且能正常获取ProgramID,但查询该类始终无数据返回。
附当前脚本
$Programs = Get-WMIObject Win32_InstalledWin32Program | Select-Object Name, ProgramID $Result = ForEach ($Program in $Programs) { Write-Output $Program.Name Write-Output $Program.ProgramID $Name = $Program.Name $ProgramID = $Program.ProgramID $FMapp = Get-WMIObject Win32_InstalledProgramFramework -Filter "ProgramID = '$ProgramID'" ForEach ($FM in $FMapp) { [PSCustomObject]@{ 'Name' = $Name 'ProgramID' = $ProgramID 'FrameworkPublisher' = $FM.FrameworkPublisher 'FrameworkName' = $FM.FrameworkName 'FrameworkVersion' = $FM.FrameworkVersion } Write-Output $FM.FrameworkPublisher } } $Result | Out-GridView
类存在性验证命令及结果
Get-WmiObject -list -recurse | Findstr Win32_InstalledProgramFramework Win32_InstalledProgramFramework {} {FrameworkName, FrameworkPublisher, FrameworkVersion, Frame...
可能的原因及排查方向
ARM架构兼容性问题
Win32_InstalledProgramFramework类的WMI提供者可能未针对ARM64架构做完善适配,部分WMI类在ARM版Windows中存在数据填充不全或不工作的情况。可在x86/x64架构的Win11环境中测试同一脚本,对比结果。WMI提供者服务异常
WMI相关服务(如Winmgmt)可能存在异常,导致数据无法正常读取。执行以下命令重启WMI服务后重试:net stop winmgmt net start winmgmt程序依赖未被该类识别
并非所有程序的依赖框架都会被Win32_InstalledProgramFramework捕获,该类仅能识别通过特定安装方式注册的框架依赖。可选择已知依赖明确的程序(如安装了Visual C++运行库的软件)单独测试,确认是否能返回数据。Parallels虚拟化环境限制
虚拟化环境可能对WMI的某些功能做了限制,或者虚拟机内的系统组件未完全初始化。尝试更新Parallels到最新版本,或在虚拟机内执行sfc /scannow修复系统文件后重试。WMI命名空间权限问题
当前用户可能没有足够权限读取该类的完整数据。尝试以管理员身份运行PowerShell,再执行脚本。
内容的提问来源于stack exchange,提问作者Denis Pajaziti

