发现另一个软件包的版本号

时间:2018-07-18 06:45:11

标签: c# windows-10-iot-core windows-iot-core-10

我正在使用的IoT Core应用程序需要知道另一个应用程序的(打包)版本。

是否可以找到另一个应用程序的版本(不需要下面的示例中的管理员密码)?

很遗憾,AppDiagnosticInfo没有提供此信息(它提供了包裹家族的名称)。

我知道使用Device Portal REST api可以做到这一点,但这需要不适合生产方案的设备管理员密码。

//Import WindowsDevicePortalWrapper with NuGet
using Windows.System.Diagnostics.DevicePortal;
(...)
var devicePortalConnection1 = new DefaultDevicePortalConnection(
  "http://127.0.0.1:8080",
  "administrator",
  "my device administrator password"); 

var portal = new DevicePortal(devicePortalConnection1);
var packages = await portal.GetInstalledAppPackagesAsync();

1 个答案:

答案 0 :(得分:1)

您可以使用PackageManager来获取已安装软件包的版本。它不需要用户名和密码,但可以在本地设备上运行。 请参考下面的代码。

    Windows.Management.Deployment.PackageManager packageManager = new Windows.Management.Deployment.PackageManager();
    IEnumerable<Windows.ApplicationModel.Package> packages = (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackages();
    foreach(var pkg in packages)
    {
        var version = pkg.Id.Version;
        Debug.WriteLine(string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision));
    }

要运行上述代码,您还需要向Package.appxmanifest添加一个restricted capability。必须在文件顶部添加一个新的命名空间:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

,然后将以下内容添加到“功能”标签中。

<rescap:Capability Name="packageQuery" />

您可能需要根据this信息将'rescap'名称空间添加到Ignorable列表中。