/* nsisFile是NSIS文件操作特别是支持二进制文件操作和十六进制文件操作的插件 文件的句柄可以通过FileOpen函数来获得,nsisFile函数的返回值在nsis的栈里,可以使用Pop来获得返回值. 你可以通过NSIS的内置函数FileSeek来定位文件读取位置与nsisFile插件进行交互. nsisFile::BinToHex:将二进制转成十六进制 nsisFile::HexToBin:十六进制转成二进制 nsisFile::FileReadBytes:读取文件 nsisFile::FileWriteBytes:写入文件,以十六进制写入 nsisFile::FileFindBytes:字符查找,-1为未找到,找到返回偏移地址. nsisFile::FileTruncate:关闭句柄 */ !ifndef TARGETDIR !define TARGETDIR "..bin" !endif !addplugindir "${TARGETDIR}" Name "Sample nsisFile" OutFile "Sample.exe" ShowInstDetails show Section "Main program" Delete "Temp.tmp" FileOpen $0 "Temp.tmp" "a" FileWrite $0 "Test-Atotorney" FileSeek $0 -4 END nsisFile::FileReadBytes $0 5 Pop $1 DetailPrint 'read: "$1" = "726E6579"' FileSeek $0 1 nsisFile::FileWriteBytes $0 "6f 746F d-u-m-b" Pop $1 DetailPrint 'written: $1 = 3' FileSeek $0 0 nsisFile::FileFindBytes $0 "42" -1 Pop $1 DetailPrint 'searching "B": $1 = -1' FileSeek $0 0 nsisFile::HexToBin "746f726e" Pop $1 DetailPrint 'HexToBin: "$1" = "torn"' nsisFile::BinToHex $1 Pop $1 DetailPrint 'BinToHex: "$1" = "746F726E"' nsisFile::FileFindBytes $0 "$1" -1 Pop $1 ; should be 1 DetailPrint 'searching "torn": $1 = 8' nsisFile::FileTruncate $0 FileClose $0 SectionEnd