如何通过Get-StartApps返回的AppID获取Windows10+应用图标
获取Windows应用ID对应的图标与可执行文件路径的官方方法
针对你遇到的问题,官方提供了两种核心思路来获取AppID对应的应用元信息,覆盖桌面应用和UWP应用场景:
一、通过Shell.Application COM对象访问shell:AppsFolder
shell:AppsFolder是Windows系统管理所有应用入口的特殊Shell文件夹,通过COM对象可以直接遍历其中的应用项,提取可执行路径、图标等信息,这是最通用的官方方法。
示例PowerShell代码:
# 初始化Shell对象 $shell = New-Object -ComObject Shell.Application # 定位到AppsFolder $appsFolder = $shell.Namespace("shell:AppsFolder") # 根据AppID获取对应的应用项 $appItem = $appsFolder.ParseName("你的AppID") # 获取桌面应用的可执行文件绝对路径 $executablePath = $appItem.ExtendedProperty("System.Link.TargetParsingPath") # 获取图标路径及索引(格式为"路径,索引") $iconInfo = $appItem.ExtendedProperty("System.Link.TargetIconPath") if ($iconInfo) { $iconPath = $iconInfo.Split(",")[0] $iconIndex = [int]$iconInfo.Split(",")[1] }
- 对于传统Win32桌面应用,
System.Link.TargetParsingPath会直接返回可执行文件的绝对路径; - 图标信息中的索引用于处理包含多个图标的文件(如exe、dll),若索引为0,直接使用路径即可提取图标。
二、针对UWP应用的专属处理
如果AppID属于UWP应用(格式通常为包家族名!应用ID),可以结合PowerShell的Get-AppxPackage命令和解析应用清单来获取信息:
示例PowerShell代码:
$targetAppId = "你的AppID" # 拆分出UWP应用的包家族名 $packageFamilyName = $targetAppId.Split("!")[0] # 获取应用包信息 $appxPackage = Get-AppxPackage -PackageFamilyName $packageFamilyName # 获取应用安装目录 $installPath = $appxPackage.InstallLocation # 解析AppxManifest.xml获取图标路径 $manifestPath = Join-Path $installPath "AppxManifest.xml" $manifest = [xml](Get-Content $manifestPath) $relativeLogoPath = $manifest.Package.Applications.Application.VisualElements.Logo $fullIconPath = Join-Path $installPath $relativeLogoPath
- UWP应用的可执行文件通常位于安装目录下的
AppxManifest.xml指定的入口点,图标则定义在清单的VisualElements节点中。
内容的提问来源于stack exchange,提问作者Michael Aigner
相关产品推荐
相关产品推荐

