热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NSIS初学者图文教程三

上接教程二ISS2NSIv1.0a2ISS2NSIisatoolforconvertInnoSetupscriptfilesintoNSISscriptfiles.Usage:Pr

上接教程二

==================
ISS2NSI v1.0a2
==================
ISS2NSI is a tool for convert Inno Setup script files into NSIS script files.


Usage:
==================
Program:
At the command prompt write: iss2nsi issscript.iss [nsiscript.nsi]
if nsiscript.nsi is no specified then the converted script will be
saved with the same name of the issscript.iss but with extension .nsi.

NIS Edit Plugin:
1- Close HM NIS Edit.
2- Put hmne_iss2nsi.dll in the plugins directory
(Default $PROGRAMFILES\HMSoft\NIS Edit\Plugins)
3- Start HM NIS Edit.
4- You will found a new item in the tools menu called "Convert InnoSetup script".

NOTE: Before compile the converted script please check it, because
complete compatibility is NOT available. I design this tool to convert my
Inno Setup scripts and is not tested with more complex scripts.

The source code is included if you want to contribute to the project
for make the converted script 100% compatible with the original.
Please send my your modifications to ranametal@blistering.net
Note that this project is a modification to the Inno Setup 3.0.6
compiler and modifications to the Inno Setup source files are under
the Inno Setup license (see: src\is-src\is-license.txt).

Note: the files in the src\is-src directory are unmodified Inno Setup
source files needed by the Compile.pas unit located in the src directory

---------------------------------------------------------
hmne_iss2nsi.dll 把这个文件放到 NISEdit 目录下的 Plugins 中就可以使用,没有详细测试,不过如果是针对版本的话, Inno Setup 3.0.6 ,估计应该没问题吧。
ISS2NSI.rar

虽然版本太低,用来从 ISS 的脚本转向学习 NSIS 应该容易点吧。

ISS2NSI 源码下载。

没时间去看看它,只是把它编译成了一个DLL。有时间看看它是什么原理。

ISS2NSI_Src.rar

NISEdit 的增强版本,希望有人来帮帮忙,增加一下函数,否则这个版本也强不到哪里去。

把里面的那些文件放入 NISEdit 的目录中,为了区分原版,程序改名为 VNISEdit。
两个版本可以同时存在,不过你要把 VNISEdit 设为默认编辑器,才可以默认用它来打开。

修正:
1.添加一种菜单的皮肤。
2.增加 NSIS 函数向导功能。(类似 Venis 中的 function 功能)
4.改程序调用帮助时,不要把帮助窗口置顶,因为置顶会令到查看帮助时不能切换会编辑器窗口。

最新功能(区段结构分析)
左图是VNISEdit解释的,右图是Venis分析的。分析对象(makensis.nsi)


全景图:试一下呗,分析速度比 Venis 好很多的。基本上感觉不到视图的闪动。线程实时分析,只要改动代码,视图会立刻作出反应。


请问下面那些问题怎样做的,
1、怎样控制自定义面的“下一步”按钮的可用与不可用
2、怎样为自定义页面上的组件添加Change事件呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本

蓝色网际
对于控制下一步按钮来说,有三个阶段分别是:页面初始化之前、页面初始化时、页面要关闭时。不同的阶段对应的插入函数不同。

比如要在页面初始化之前禁止下一步按钮,MUI 界面可以这样

 

 

以下是代码片段:
!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre
!insertmacro MUI_PAGE_COMPONENTS

Function ComponentPre
GetDlgItem $0 $HWNDPARENT 1
EnableWindow $0 0
FunctionEnd
colonel
那“2、怎样为自定义页面上的组件添加Change事件呢”,我自定义了一个配置页面,我想用户在完成配置才可激活“下一步”按钮,这个怎么做的呢

蓝色网际
需要给控件加上 NOTIFY 的标记。
例子在我的签名里有。

需要先了解 GetDlgItem 和 EnableWindow 指令的作用。

colonel
这个问题呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本
怎样使“MUI_PAGE_COMPONENTS”中的树目录只能在点选复选框才被选中呢

蓝色网际
这个用 Resource Hacker 调整一下控件就行了。默认的 UI 文件是 NSIS\Contrib\UIs\modern.exe
到我的签名里下一个特别版的 makensis.exe。

colonel
我不想在组件选择页面中用 onMouseOverSection 来显示 描述 ,如果架设函数可以增加的话,我就想到这个 “回调 onMouseDownSection ”

我是想通过组件目录里的 OnChange 事件来显示

我不懂VC++吖,如果我会的话就可以像MM你那样去改它的代码了

蓝色网际
特别版的就是这样啊,当你点击组件的时候描述区域才会显示或改变。
普通版的只要鼠标移上去就显示了。你没试过吗。

colonel
哦~~~~~~~试到了,原来你是改了onMouseOverSection 回调,对啦,MM你有没有做过 组件的OnChange 事件吗?主要是用在自定义页面上的

是用这个吗?Call shell32.dll::SHChangeNotify

蓝色网际
不知道你说的“组件的 OnChange 事件”是什么意思。
是不是当组件选择更改的时候调用的函数呢?如果是的话那直接使用 Function .onSelChange 就行了。

wq99
各位好:我是新手,
我在看function时,没发现参数的传入。
可能我的思维方式不对。
function Fname
functionend
参数应该怎么传呢?

蓝色网际
NSIS 的函数其实是个假函数,并不能像 C++ 那样传递参数,如果你需要传递参数请使用堆栈。
一个典型的例子请看附录的 Get parent directory。

那如果一个Edit里的内容发生变化,另一个组件也跟关变化,这个Edit 的Change事件去写呢

PS:可能我习惯于使用delphi所以有时说到的组件事件名称与你不一样吧


colonel
那如果一个Edit里的内容发生变化,另一个组件也跟关变化,这个Edit 的Change事件去写呢

PS:可能我习惯于使用delphi所以有时说到的组件事件名称与你不一样吧

蓝色网际
你可以参考一下 NSIS\Contrib\InstallOptions\testnotify.nsi


wq99
File "${LOCATION}\$R0"
$R0是一个文件,结果
说没有这个文件,
File "${LOCATION}\123.exe"
那就可以了。

奇怪,我第一句写错了么?
File "${LOCATION}\${R0}"这样也不对。

蓝色网际
你可以先在资源管理器里看看是否有 $R0 这个文件。一般来说很少有这种不带扩展名的奇怪文件,况且不带扩展名的话很容易被当作目录来处理。

一般来说编译器的报告是正确的,这里有一个测试脚本,你可以试试看。
test.zip

wq99
啊~对不起啊,我没说仔细。

$R0是变量,是从堆栈里Pop出来的。
即123.exe.
File "${LOCATION}\$R0"
即File "${LOCATION}\123.exe"

 

以下是代码片段:
Push "123.exe"
……
Function InstallOne
Pop $R0
DetailPrint $R0
SetOutPath "$INSTDIR"
File "${LOCATION}\$R0"
ExecWait ’"$INSTDIR\$R0"’
FunctionEnd


DetailPrint $R0
是可以打印出 123.exe
改成File "${LOCATION}\123.exe"是可以的。
怎么用$R0就不行了呢?

蓝色网际
File 指令后面的文件必须是编译时当前系统存在的文件,而 $R0 要在编译后才有值当然会出错。变量是运行时才有效的。
如果你想改名的话请使用 File "/oname=目标文件" "本地文件"
oname= 后面的目标文件可以用变量。  


arthur810
为什么我的“安装程序语言”里面是空的
如图,请指教,谢谢
注:WinXP SP2简体中文系统


zhp0083
手动指定一次就会有了
 

以下是代码片段:
!insertmacro MUI_LANGUAGE "SimpChinese"


sjhome
请问NSIS只能添加一个目录下的文件,怎么样能添加所以目录下的文件呢?怎么设置呢?多谢!
如图所示.
只能添加"Counter-Strike Source"目录下的文件,怎么样能添加"Counter-Strike Source下的bin文件,config文件及所以文件夹"呢?

蓝色网际
File 可以使用 /r 或 /x 。


转:https://www.cnblogs.com/GT_Andy/archive/2009/06/26/1922070.html



推荐阅读
author-avatar
雪蝴蝶的诺言forever
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有