我可以在 Inno-Setup 中使用 "Generate GUID" 选项创建的 AppId 吗?

Can I use AppId created by "Generate GUID" option in Inno-Setup?

第一次需要设置,所以用了Inno-Setup。但是我在文档中找不到的一件事是 "Generate GUID" 按钮真的生成了全球唯一的 ID?我可以将其用作我的应用程序的 AppId 用于生产目的吗?

如果是,那么它如何保证它在全球生产中是独一无二的? 我的意思是,这个 "Generate GUID" 功能是跟踪世界上所有软件的 AppId 以使下一个唯一,还是使用打包到设置中的文件生成它?

该功能生成的 GUID 与基础 CoCreateGuid API 函数生成的 GUID 一样唯一。您可以自由地将它用于 AppId 指令,但没有人保证您在系统中是唯一的。每个人仍然可以键入 与您生成的相同的 GUID,尽管机会很小。

如果你真的害怕它的唯一性,你可以使用{code:..}常量并在运行时生成它。

虽然您可以在运行时将 GUID 生成为 - 问题就会变成,当有人在新更新发布时升级安装(您发布了 update/bugfix),那么安装程序将无法确定要在内部更新哪个 GUID。您需要编写一些复杂的东西来确定应用程序是否已经安装而不使用 GUID 来识别它(因为理论上它在安装它的每个用户机器上都是不同的 GUID)。

至于GUID应该由什么组成:GUID通常 8-4-4-4-12 Hex,但是Innosetup允许你使用任何你想要的。您可以不生成 GUID,而是使用像 "JayadrathaMondal_ApplicationName_For_Company." 这样的值,只要它永远不会改变(例如,不要让它依赖于版本号),您应该永远都很好。

没有集中式跟踪服务来保证您设置的 GUID 要么已经被使用,要么您 select 的 GUID 以后将无法被其他人使用。

但是,GUID 应该唯一 足够,因此不太可能。考虑维基百科的以下内容:

From Wikipedia > GUIDs (Globally unique identifier):

[...] GUIDs generated from random numbers normally contain 6 fixed bits (these indicate that the GUID is random) and 122 random bits; the total number of unique such GUIDs is 2122 (approximately 5.3×1036). This number is so large that the probability of the same number being generated randomly twice is negligible; however other GUID versions have different uniqueness properties and probabilities, ranging from guaranteed uniqueness to likely duplicates. Assuming uniform probability for simplicity, the probability of one duplicate would be about 50% if every person on earth as of 2014 owned 600 million GUIDs.

想象一下,地球上的每个人(7,000,000,000 人)都是软件开发人员,他们都创建了 600,000,000 个应用程序,这些应用程序都使用 GUID。总共会使用 6e17 个 GUID,任何新的 GUID 都有大约 50% 的机会已经存在。

随着您开始将不会生成自己的 GUID 的 70 亿人(非开发人员)打折,这个数字会减少。