发现另一个包的版本号
Discover the version number of another package
我正在处理的 IoT Core 应用程序需要知道另一个应用程序的(包)版本。
是否可以找出另一个应用程序的版本(不需要管理员密码,如下例所示)?
遗憾的是 AppDiagnosticInfo
没有提供此信息(它提供了包 family 名称)。
我知道 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();
您可以使用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"
并将以下内容添加到 Capabilties 标签中。
<rescap:Capability Name="packageQuery" />
您可能需要根据 this 信息将 'rescap' 命名空间添加到可忽略列表。
我正在处理的 IoT Core 应用程序需要知道另一个应用程序的(包)版本。
是否可以找出另一个应用程序的版本(不需要管理员密码,如下例所示)?
遗憾的是 AppDiagnosticInfo
没有提供此信息(它提供了包 family 名称)。
我知道 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();
您可以使用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"
并将以下内容添加到 Capabilties 标签中。
<rescap:Capability Name="packageQuery" />
您可能需要根据 this 信息将 'rescap' 命名空间添加到可忽略列表。