2012-09-10 20 views
1

如何在Inno Setup中实现MD5检查,以便它可以验证InitializeSetup上的基本安装程序文件(exe + bin) - 这是标准的NSIS功能,这非常有用,因为它会通知安装程序是否正常或损坏?如何在Inno Setup安装程序中实现MD5检查以获得'像NSIS完整性检查'?

如果IS可能需要嵌入MD5Summer或其他MD5检查器,并在编译期间/之后创建MD5总和。

+0

您需要暂时提取文件并使用['GetMD5OfFile'](http://www.jrsoftware.org/ishelp/topic_isxfunc_getmd5offile.htm)函数来实现此目的。 – TLama

+1

在编译时,您可以使用同名的['GetMD5OfFile'](http://www.jrsoftware.org/ispphelp/topic_getmd5offile.htm)预处理器函数并存储MD5总和,例如转换成您可以在运行时加载的文本文件。但是,这并不容易,因为你['不能访问文件列表](http://stackoverflow.com/a/11736521/960757)。 – TLama

+0

如果您没有指定['dontverifychecksum'](http://www.jrsoftware.org/ishelp/topic_filessection.htm)标志,则应该足够使用['ExtractTemporaryFile'](http:// www。 jrsoftware.org/ishelp/topic_isxfunc_extracttemporaryfile.htm)函数(快速查看源代码)。当文件生病时它会抛出异常:-) – TLama

回答

0

如何为所有.bin文件创建md5散列? 这应该在2个步骤来完成:

1)编制的.bin(S)创造的MD5哈希 - 哈希值将被存储为文本文件,里面的setup.exe [所以这是一个2步编译:创建.bins ,为.bins创建散列并再次编译以将散列包含到setup.exe中]

2)在使用插件的InitializeWizard()函数的runtine中。

您可以轻松地将散列与某些Pascal字符串比较函数或简单的'='进行比较。 如果散列不匹配,则可以在显示任何窗口之前使安装程序存在。

重要的是要有小的setup.exe - 哈希必须总是在[文件]部分顶部附近的某个地方进行快速解压缩。 而且一切都必须稳定,所以在setup.exe中添加哈希将不会修改.bins的md5。

+0

1)您可以使用预处理器2)该插件如何从InnoSetup安装档案文件中提取文件?不要忘记,只有在安装时复制文件时才解压缩它们。 – TLama

+0

提取文件很简单:将文件放入[Files]部分“Source:file.hash; Flags:dontcopy;”并在InitializeWizard()函数中将它们解压为“ExtractTemporaryFile('file.hash');” – Slappy

1

Inno已经对其内容进行了全面的完整性检查。没有必要做额外的检查。

如果您在使用磁盘延伸(由.bin文件的所有脑干暗示的),那么.bin文件可能无法使用(在不同的磁盘)等不进行扫描,直到建立获取到该磁盘。

+0

它在安装过程中会发生异常。无论如何,我可以破坏文件并安装程序将运行。它会在安装过程中通知有关问题。我想/需要的是验证'InitializeSetup'上的所有文件。所以我不能同意你的答案。 – RobeN

+0

你失去了我。我们同意安装程序验证其文件。你想要检查什么? – Deanna

+0

运行任何NSIS安装程序。在显示向导之前,它将验证整个安装程序。如果安装程序文件损坏,它会通知有关问题并退出。所以...用户可以确定,如果安装程序将显示向导,安装程序是OK(没有损坏)。即使机柜发生故障,损坏,Inno Setup Setup也可以运行。它会在安装过程中显示错误。我希望IS在向导之前验证安装程序的文件。为什么?因为如果应用程序很大 - 例如12 BINs - 在提取最后一个柜子时遇到错误,我会非常生气。更好的了解之前... – RobeN

相关问题