С методом FindPackageForUser
проблем нет.Для успешной работы этого метода сначала необходимо запустить Visual Studio в режиме Администратор ( Шаги: «Пуск-> Щелкните правой кнопкой мыши Visual Studio -> Дополнительно -> Запуск от имени администратора» * 1005).*).
Затем, когда вы вызываете метод FindPackageForUser
и передаете string.Empty
в качестве первого параметра, если он возвращает NULL
, это означает, что этот пакет не установлен для текущего пользователя.
Чтобы проверить эту точку, вы можете проверить сообщение в окне вывода при вызове метода FindPackages()
.Различные пакеты должны иметь разные user и user securityId.Вы можете использовать метод «DisplayPackageUsers», чтобы увидеть идентификатор безопасности пользователя, как показано ниже:
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 в качестве первого параметра.Вы можете получить соответствующий идентификатор безопасности от указанных выше методов.Затем, вызов метода FindPackageForUser
вернет конкретную информацию о пакете.