为什么我下面的this方法的代码示例返回了?
using Windows.Management.Deployment;
…
...
Windows.ApplicationModel.Package oPkg = oPkgManager.FindPackageForUser(string.Empty, "HoloCamera_1.0.0.5_neutral__cw5n1h2txyewy");
备注:要测试FindPackageForUser(…)
方法,您需要首先按照说明向您的VS2017
项目的任何类型(Winform,WPF等)添加以下引用here:
注意:首先使用VS2017
,我为FindPackages()
方法运行了this示例代码示例,以查找我Windows 10
上安装的所有软件包。我发现默认情况下Windows上安装了几个软件包。而且,我尝试了以下两个,但是它们都在上面的代码行中返回null。
以下是FindPackages()方法返回的两个程序包。而且,我在上面的代码示例中尝试了这两种方法:
1.
Name: HoloCamera
FullName: HoloCamera_1.0.0.5_neutral__cw5n1h2txyewy
Version: 1.0.0.5
Publisher: CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
PublisherId: cw5n1h2txyewy
IsFramework: False
And
2.
Name: DesktopLearning
FullName: DesktopLearning_1000.15063.0.0_neutral__cw5n1h2txyewy
Version: 1000.15063.0.0
Publisher: CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
PublisherId: cw5n1h2txyewy
IsFramework: False
答案 0 :(得分:0)
FindPackageForUser
方法没有问题。为了使此方法成功工作,首先需要以管理员模式运行Visual Studio(步骤:“开始->右键单击Visual Studio->更多->以管理员身份运行” < / strong>)。
然后,当您调用FindPackageForUser
方法并将string.Empty
作为第一个参数传递时,如果返回NULL
,则表示当前用户未安装此软件包。
要验证这一点,可以在调用FindPackages()
方法时在“输出”窗口中检查消息。不同的软件包应具有不同的用户和用户securityId。您可以使用“ DisplayPackageUsers”方法查看用户的securityId,如下所示:
private static void DisplayPackageUsers(Windows.Management.Deployment.PackageManager packageManager, Windows.ApplicationModel.Package package)
{
IEnumerable<Windows.Management.Deployment.PackageUserInformation> packageUsers = packageManager.FindUsers(package.Id.FullName);
Debug.Write("Users: ");
foreach (var packageUser in packageUsers)
{
Debug.Write(string.Format("{0},UserSecurityId: {1} ", SidToAccountName(packageUser.UserSecurityId), packageUser.UserSecurityId));
}
Debug.WriteLine("");
}
private static string SidToAccountName(string sidString)
{
SecurityIdentifier sid = new SecurityIdentifier(sidString);
try
{
NTAccount account = (NTAccount)sid.Translate(typeof(NTAccount));
return account.ToString();
}
catch (IdentityNotMappedException)
{
return sidString;
}
}
因此,如果要使用FindPackageForUser
方法来查找某个软件包,则还需要传递特定的用户securityId作为第一个参数。您可以从上述方法中获取适当的用户securityId。然后,调用FindPackageForUser
方法将成功返回特定的软件包信息。