让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的源代码,而且NSISLicense也是允许你这样做,只要你不找NSIS的原开发者什么麻烦。不过解决一个问题,引出三个问题要解决,似乎有点……要是解决那三个问题再引出九个问题可如何是好啊?

 

所以至于如何改,还没有研究出来。以后有需求再说吧。

 

关于如何编译NSIS的源代码,可以参考我的另一篇文章——VS2008环境下使用Scons编译NSIS

posted on 2009-04-06 22:52  南柯之石  阅读(6774)  评论(0编辑  收藏  举报

导航