我希望使用 NSIS 为机器创建一个唯一的 id,
我在网上做了一些研究,发现了一个用 c# 编写的很棒的解决方案
http://www.codeproject.com/Articles/28678/Generating-Unique-Key-Finger-Print-for-a-Computer
是否有一些已知的库/插件/代码可以给我类似/接近的结果?
如果不是,那么实施此类解决方案的最佳方法是什么?
我希望使用 NSIS 为机器创建一个唯一的 id,
我在网上做了一些研究,发现了一个用 c# 编写的很棒的解决方案
http://www.codeproject.com/Articles/28678/Generating-Unique-Key-Finger-Print-for-a-Computer
是否有一些已知的库/插件/代码可以给我类似/接近的结果?
如果不是,那么实施此类解决方案的最佳方法是什么?
wiki 上有一个使用 NSIS 生成 GUID的示例(实际上是 3 个连续的方法),除了系统 dll 之外不需要外部依赖。
总之,它不像你提到的代码那样使用系统管理,而是直接CoCreateGuid()
从ole32调用函数。
系统访问器:它可以自动将堆栈弹出到你给它的变量中,或者将它保留在堆栈中
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
一个简单的解决方案是编译该代码,将 exe 嵌入到安装程序中,然后在安装程序运行时运行 exe。