让NSIS生成的安装包在静默安装时从命令行窗口输出安装信息
静默安装就是安装时不显示UI,只显示一个CMD窗口,并用命令行传递安装时需要的参数。心想静默安装怎么地安装完了得有个结果显示出来吧,结果NSIS制作的安装包真是彻底静默了,命令执行之后立马返回了,而且一行信息也没有显示出来,要不是到安装目录下自己看看,天知道安装成功没有?在Winamp的论坛上,已经有人问过同样的问题,结论是要使用下面的参数重新编译NSIS的源代码,才能把安装时的详细信息在静默安装时显示在CMD窗口上。
NSIS_CONFIG_LOG_STDOUT=yes
当然,要启用Log功能,还要有下面的编译参数:
NSIS_CONFIG_LOG=yes
结合起来也就是要使用下面的编译指令重新编译NSIS的源代码。
scons NSIS_CONFIG_LOG=yes NSIS_CONFIG_LOG_STDOUT=yes
编译完成之后,在源代码的根目录下,会多出一个build目录,复制下面几个文件到你安装的NSIS的目录下,覆盖相应文件。
Build"release"makensis"makensis.exe
Build"release"Makensisw"makensisw.exe
把几个stub开头的几个文件夹中的可执行文件,覆盖NSIS安装目录下stubs里的相应文件,这时需要重命名一下的。规则就不描述了,比较一下就能知道了。
经过测试,用重新编译过的NSIS生成的安装包文件,可以在静默安装时把原来显示在GUI窗口中的安装信息显示在CMD窗口中。
但是会有新的问题!主要有三个,前两个是我测试时发现的,最后一个是NSIS的开发者在论坛上自己坦白的。
1. 这样生成的安装包事实上是一个带有GUI窗口的CUI程序,这样在安装和卸载时都会带有一个CMD黑窗口在后面,很不好看。
2. 由于是把LOG到文件的输出,重定向到了CUI程序的STDOUT,原本应该生成的install.log文件没有生成出来。这同时会给基于安装日志的卸载带来不利影响。
3. 一部分插件的输出,由于和NSIS本身的输出机制不是很和谐(就是插件开发者没有使用NSIS自身的输出机制,非要自己写一个)并不能把安装信息输出到CMD窗口。
从理论上讲,这几个问题都是可以解决的,但是不是靠几个简单的编译选项就能搞定的了。应该是需要修改NSIS的源代码,而且NSIS的License也是允许你这样做,只要你不找NSIS的原开发者什么麻烦。不过解决一个问题,引出三个问题要解决,似乎有点……要是解决那三个问题再引出九个问题可如何是好啊?
所以至于如何改,还没有研究出来。以后有需求再说吧。
关于如何编译NSIS的源代码,可以参考我的另一篇文章——在VS2008环境下使用Scons编译NSIS。