【问题标题】:Finding out installed Metro applications on a machine找出机器上已安装的 Metro 应用程序
【发布时间】:2013-08-12 03:00:37
【问题描述】:

我正在尝试用 C# 编写一段代码来查找机器上所有已安装的 Metro 应用程序。我遇到了以下帖子Get a list of metro apps and launch them in Windows 8 using PowerShell,它解释了从系统注册表中获取此信息。这是获取列表的唯一可靠方法吗?有人知道其他方法吗?提前致谢

【问题讨论】:

  • 您是否正在寻找一种从 Metro 应用程序本身内部 执行此操作的方法?因为如果是这样,那感觉就像在沙盒环境中运行时不可能发生的事情。

标签: c# microsoft-metro


【解决方案1】:

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

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

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

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

完成上述操作后,我能够列出所有地铁套餐。

【讨论】:

  • 那么最终它是在 Metro 应用程序中工作还是您能够在非 Metro 应用程序中迭代?
  • 我在上面对 Braim 的回答的评论中收到了 Yam 的错误,但添加了 标签内的 .csproj 文件。这修复了错误并成功构建了项目。该项目是一个控制台应用程序。
  • 谢谢!在我的电脑上,第 2 步中的引用位于 C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Annotated\Windows.winmd
【解决方案2】:

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

IEnumerable<Windows.ApplicationModel.Package> packages = 
        (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");

http://msdn.microsoft.com/en-us/library/windows/apps/windows.management.deployment.packagemanager.aspx

【讨论】:

  • 以上代码不适用于 Windows 8 应用程序,它在初始化 PackageManager 对象时抛出“访问被拒绝”异常。它仅适用于桌面或控制台应用程序。
  • 我的错,清楚地说“你不能在 Windows 应用商店应用程序中使用这个类。”
  • 编译项目时出现以下错误“类型'System.Collections.Generic.IEnumerable`1'在未引用的程序集中定义。您必须添加引用组装 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'”。任何想法为什么我会看到这个?
【解决方案3】:

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

How to get all Metro apps list in Metro App?

How do I get all Metro style apps list in my Metro App?

执行相同的here's code.

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 2011-06-04
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2017-05-25
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多