我正在使用的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();
答案 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列表中。