总是有朋友反馈说,打包出来的程序会被360报毒!
嗯... 这是一个问题,360误报不是一天两天了。
被误报,一般是两个原因:
问题即答案啊,那就是添加代码签名,然后提交360认证就好!^_^ 我们重点讲签名,在这个层面尽可能减少误报。 还有朋友反馈,我已经给打好包的程序签名了,可是还是会被360误报,这个是什么原因呢?
原来,NSIS在打包的过程中,会同步的生成卸载方案,在安装的过程中,有一个释放卸载程序的步骤:
WriteUninstaller "$INSTDIR\uninst.exe"
就是这个WriteUninstaller指令,会在安装时,动态的向目标安装目录下释放一个卸载程序,而这个程序由于是动态写入的,并没有添加签名,这是最主要的引起误报的原因。
今天我们就来看一下,在nsNiuniuSkin的安装包打包方案中,是如何优雅的解决这个问题的。
我们的目标是:生成的安装包中,要带上已经签好名的卸载程序。
我们的卸载程序的卸载逻辑是卸载其自身所在目录下的文件,所以可以提前生成他,签名后保存起来,后续直接使用他,我们本可以这样干:
然而,这样会导致安装程序与卸载程序脱节,容易在后续的版本发展过程中引起卸载出问题;考虑到我们生成安装包时,是可能修改了安装界面与卸载界面的,所以我们的方案是每次打包时,都是同步生成最新的卸载程序,把卸载程序的生成、签名、打包进主安装包中的流程统一起来,统一控制,一次性从0生成最终的安装包!
以下是我们一键生成的完整方案,脚本流程如下:
以上流程,在我们最新的打包脚本中已经完全包含了,同时提供了代码签名的脚本,如果你手头已经有了代码签名证书,只要配置上证书名称、证书密码,然后通过我们的一键打包脚本,就可以制作出完全签名且界面精美的安装包了。
生成卸载程序、释放、签名、复制到FilesToInstall的入口脚本
签名效果:
主程序签名效果
签名脚本介绍
签名使用微软的signcode.exe进行签名,核心签名脚本如下:
@echo off
set pfx_password=%3
set timestamp=http://timestamp.digicert.com
:doSign
echo "doSign %1-------"
signtool.exe sign /f %2 /p "%pfx_password%" /t %timestamp% /du %4 "%1"
if errorlevel 2 goto :doSign
if errorlevel 1 goto :doSign
if errorlevel 0 goto :eof
:offline
echo "no network"
pause
exit
相应的脚本我们已经进行了bat封装,且整合到了整个打包的过程中,如果不想花时间动手自己写,就联系我吧!
您也可以直接安装nsNiuniuSkin界面在线设计引擎来实际看看效果:
http://www.leeqia.com/download/NSNiuniuSKin_DuiDesigner_Setup.exe
至此,我们已经有了一个完全签名的安装包程序了,理论上被误报的可能性会大大降低,但也不能说就完全不会;为确保正常,建议还是到360提交软件白名单。
又有朋友有疑问了,那么要去哪里购买代码签名证书呢? 这个不是随便买的,要去正规的CA机构购买,目前已经很难买到个人的代码签名证书了,都需要以公司的名义购买; 国内的CA机构可以买沃通;国外的话,选择会更多一些,这里推荐一家比较便宜的代码签名证书购买代理网站: https://cheapsslsecurity.com/
比如sectigo的代码签名证书,最低可以做到70美金一年,我们家的代码签名证书就是这上面买的,实际上还是由sectigo进行签发,可以放心购买!
在安装包安装过程中,精美的UI往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!
愿天下没有难做的安装包!