AUMID(应用程序用户模型 ID)是否唯一?

val*_*n0t 4 windows windows-8.1

例如,免费应用 3D Builder(适用于 Windows 8.1)的 AUMID 为“Microsoft.3DBuilder_8wekyb3d8bbwe!App”。我从注册表中获得了这个值。它是唯一的还是静态的?

如果您需要更多信息,请告诉我。

小智 6

AUMID 是独一无二的吗?是和否。

ApplicationUserModelId (AUMID) 是 PackageFamilyName 和 PackageRelativeApplicationID (PRAID) 的组合。后者是 AppxManifest.xml 中的“Id”。

PRAID 在一个包中是独一无二的;它在包中并不是唯一的。

包标识是一个 5 元组:名称、版本、架构、ResourceId 和 Publisher(通常表示为 PublisherId)。

PackageFullName 在空间和时间上都是唯一的 - 具有相同 PackageFullName 的 2 个包是同一个东西。[你最好不要改变包的位,而是给它们相同的身份——这违反了应用程序模型,并且用身份的概念玩弄地狱。各种检查(尝试)阻止,例如向商店提交具有相同内容的不同包不应该成功。]

PackageFamilyName 只是名称 + PublisherId。所以它在包中并不是唯一的。

appmodel 有一个规则,即 1 个用户不能在一个包系列中注册 1 个以上的 Main(应用程序)包。这不仅是完全合法的,而且是一个设计功能,我可以在一台机器上安装 Scrabble v1,Joe 可以安装 Scrabble v2,Mary 安装了 Scrabble v3,WU 通过 AutomaticUpdates 安装了 Stage'd v4(尽管还没有用户引用它)。在这种情况下,您一次可以在机器上的软件包系列中拥有 4 个 Main 软件包,但对于任何一个用户来说,只有(最多)1 个可用(已注册)。

所以 AUMID 在一台机器上不是唯一的。但是 AUMID + User + PackageType=Main 在一台机器上是唯一的。

  • PackageType_Main 很重要。一个用户可以注册0-1个主包、0+个资源包和0+个框架包。只要您将视图范围仅限于 Main 包(即唯一允许包含的包),则 AUMID+User 在机器上是唯一的。

** 因为不同的机器在一个系列中可能有不同的 Main 包,所以 AUMID+User 在机器之间不是唯一的。

*** 没有规定 PRAID 在一个家庭中的软件包的不同版本中保持不变,因此 Scrabble v1 可以有 Id="App",v2 可以有 Id="MyApp",v3 可以有 Id="Look.Its.Me .Scrabble”等。很少有开发人员更改他们的 PRAID(因为它往往会弄乱对他们的 AUMID 的任何编码或持久引用),但没有反对它的规则。