这是我第一次需要进行设置,所以使用Inno-Setup。但有一件事我无法在文档中找到“生成GUID”按钮真的生成全局唯一ID?我可以将此作为我的应用程序的AppId用于生产目的吗?
如果是,那么它如何保证它在全球生产中是独一无二的? 我的意思是这个“生成GUID”功能跟踪世界上所有软件的AppId,使下一个独特,或者使用打包到设置中的文件生成它?
答案 0 :(得分:4)
该功能生成的GUID与底层CoCreateGuid
API函数生成的GUID一样唯一。您可以自由地将它用于AppId
指令,但没有人保证您在系统中是唯一的。每个人仍然可以输入那里生成相同的GUID,但机会非常小。
如果您真的害怕它的唯一性,可以使用{code:..}
常量并在运行时生成它。
答案 1 :(得分:1)
虽然您可以在运行时生成GUID TLama noted - 但是当有人在新的更新发布时(您发布更新/错误修复)升级安装时,安装程序将不会出现问题能够确定要在内部更新的GUID。您需要编写一些复杂的东西来确定应用程序是否已经安装而不使用GUID来识别它(因为理论上它在安装它的每台用户机器上都是不同的GUID)。
GUID应包含的内容:GUID 通常 8-4-4-4-12 Hex,但Innosetup允许您使用任何您想要的内容。您可以使用“JayadrathaMondal_ ApplicationName _For_ Company ”之类的值,而不是生成GUID。只要它不会改变(例如,不要使它依赖于版本号),你应该永远是好的。
没有集中跟踪服务来保证您设置的GUID已经被使用,也不会保证您选择的GUID将被其他人继续使用。
但是,GUID应该是唯一的,因此不太可能。请考虑维基百科的以下内容:
来自Wikipedia > GUIDs (Globally unique identifier):
[...] 从随机数生成的GUID通常包含6个固定位(这些指示GUID是随机的)和122个随机位;唯一此类GUID的总数是2122(约5.3×1036)。这个数字太大,以至于随机产生两次相同数字的概率可以忽略不计;但是其他GUID版本具有不同的唯一性属性和概率,从保证唯一性到可能的重复。假设统一概率简单,如果2014年全球每个人拥有6亿个GUID,则一个重复的概率约为50%。
想象一下,地球上每个人(7,000,000,000人)都是软件开发人员,他们都创建了600,000,000个全部使用GUID的应用程序。总共有6e17个GUID正在使用中,任何新的GUID都有50%的可能性已经存在。
这个数字会随着您开始为那些不会生成自己的GUID(非开发人员)的70亿人打折而减少。