我希望使用NSIS为
的机器创建一个唯一的ID我在网上进行了一些研究,发现了一个用c#
编写的出色解决方案http://www.codeproject.com/Articles/28678/Generating-Unique-Key-Finger-Print-for-a-Computer
是否有一些已知的库/插件/代码可以给我一个类似/接近的结果?
如果没有,那么实施此类解决方案的最佳方式是什么?
答案 0 :(得分:1)
wiki上有一个generating a GUID with NSIS的例子(实际上是3个连续的方法)除了系统dll之外不需要外部依赖。
简而言之,它不像您提到的代码那样使用系统管理,而是直接从ole32调用CoCreateGuid()
函数。
系统访问器:它可以自动将堆栈弹出到你给它的变量中,或者将它保存在堆栈中
Function CreateGUID
System::Call 'ole32::CoCreateGuid(g .s)'
FunctionEnd
助手宏:
!define CreateGUID `!insertmacro _CreateGUID`
!macro _CreateGUID _RetVar
Call CreateGUID
!if ${_RetVar} != s
Pop ${_RetVar}
!endif
!macroend
示例:
;${CreateGUID} $0 ; $0 contains GUID (poped from the stack by the macro)
;${CreateGUID} s ; the value is kept on the stack, we pop it ourselves
;Pop $0 ;contains GUID
答案 1 :(得分:0)
一个简单的解决方案是编译该代码,将exe嵌入到安装程序中,并在安装程序运行时运行exe。