C# 查找计算机上已安装的Metro应用程序

C# 查找计算机上已安装的Metro应用程序,c#,microsoft-metro,C#,Microsoft Metro,我试图用C语言编写一段代码,以查找机器上安装的所有Metro应用程序。我遇到了下面的帖子,它解释了如何从系统注册表中获取这些信息。这是获得名单的唯一可靠方法吗?有人知道其他的方法吗?提前谢谢我希望我能发表评论……这是一个选项吗 IEnumerable<Windows.ApplicationModel.Package> packages = (IEnumerable<Windows.ApplicationModel.Package>)packageMana

我试图用C语言编写一段代码,以查找机器上安装的所有Metro应用程序。我遇到了下面的帖子,它解释了如何从系统注册表中获取这些信息。这是获得名单的唯一可靠方法吗?有人知道其他的方法吗?提前谢谢

我希望我能发表评论……这是一个选项吗

IEnumerable<Windows.ApplicationModel.Package> packages = 
        (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");
IEnumerable包=
(IEnumerable)packageManager.FindPackagesForser(“”);

您无法在WinRT应用程序中遍历PC中安装的所有软件包。这在桌面和控制台应用程序中是可能的。有关更多信息,请参阅这些MSDN线程


执行相同的操作

谢谢大家!为了使PackageManager代码正常工作,我必须执行以下操作

1) 将以下内容添加到.csproj

 <PropertyGroup>
   <TargetPlatformVersion>8.0</TargetPlatformVersion>
 </PropertyGroup>
 <Reference Include="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

8
2) 添加对C:\Program Files(x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral\Windows.winmd的引用


完成上述操作后,我可以列出所有metro软件包。

如果有人想知道如何在接受的答案中获取
packageManager
变量,您需要执行以下操作:

Windows.Management.Deployment.PackageManager packageManager = new Windows.Management.Deployment.PackageManager();

我猜这属于评论,但我没有足够的声誉,对不起。

上面的代码不适用于Windows 8应用程序,它在初始化
PackageManager
对象时抛出“访问被拒绝”异常。它只能在桌面或控制台应用程序中工作。我的坏消息清楚地表明“您不能在Windows应用商店应用程序中使用此类。”我在编译项目时遇到以下错误“在未引用的程序集中定义了类型'System.Collections.Generic.IEnumerable'1'。必须添加对程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的引用" . 你知道我为什么会看到这一点吗?你是否在寻找一种从Metro应用程序本身中实现这一点的方法?因为如果是这样的话,在沙盒环境中运行时感觉就像是不可能的事情。那么,它最终在metro应用程序中工作了吗?或者你能够在非metro应用程序中迭代它?我在上面对Braim回答的评论中得到了Yam的错误,但添加到了标记中的.csproj文件中。这修复了错误并成功构建了项目。该项目是一个控制台应用程序。谢谢!在我的计算机上,步骤2中的参考位于
C:\ProgramFiles(x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Annotated\Windows.winmd