调用插件命令时是否需要加 /NOUNLOAD

来源:互联网 发布:怎么对数据库进行优化 编辑:程序博客网 时间:2024/05/17 01:03

http://blog.csdn.net/nsisex/article/details/14452855

上次说过本来想写教程的,后来放弃了,只写了一部分

这次再摘抄一部份扫一下盲:


      对于大部份人来说,可能都只会按插件提供的例子去做,能编译得过能正常运行就算了,但你想过没有,为什么有些插件需要/NOUNLOAD才能正常运行,而有些插件却从来不用也能正常运行?

      首先,/NOUNLOAD是NSIS遗留下来的历史问题,是为了兼容旧版本的插件而保留下来的,在NSIS2.42之前,如果想插件在调用之后不被FreeLibrary,必须使用/NOUNLOAD参数 或SetPluginUnload alwaysoff,但这有个不便之处是必须以后不加/NOUNLOAD参数再调用一次该插件,否则会造成安装程序在退出时无法删除该dll。

      从NSIS2.42开始,只要新编写的插件调用它新提供的接口,就可以自动在安装程序退出时才被FreeLibrary,因此调用插件命令时无需使用/NOUNLOAD参数。

     其次,对于旧版本的插件不用 /NOUNLOAD参数也能正常运行的原因在于它被FreeLibrary后没有造成任何影响,但对于一个界面类的插件,肯定要保持插件不被FreeLibrary的,因为它需要将窗口的回调函数修改成自己内部的函数,如果它被FreeLibrary了,后果可想而知。

原创粉丝点击