标签 NSIS 下的文章

Unicode NSIS调用nsProcess插件报错

!insertmacro: nsProcess::FindProcess
Invalid command: nsProcess::_FindProcess
Error in macro nsProcess::FindProcess on macroline 1
Error in script "C:\tunps.com.nsi" on line 236 -- aborting creation process

下载nsProcess 1.6.7,官方已经标明支持UNICODE,所以我想配合Unicode NSIS使用应该是没有问题的。我将包里面的\Include\nsProcess.nsh复制到Unicode NSIS程序目录下的Include目录。然后将\Plugin\nsProcessW.dll放入Unicode NSIS程序目录下的Plugin目录。结果编译nsi报以上错误信息。

因为没有看下载nsProcess里面的README就直接开始用了。所以没有察觉到需要将nsProcessW.dll重命名为nsProcess.dll的步骤。打开nsProcess.nsh头文件:

!define nsProcess::FindProcess `!insertmacro nsProcess::FindProcess`

!macro nsProcess::FindProcess _FILE _ERR
nsProcess::_FindProcess /NOUNLOAD `${_FILE}`
Pop ${_ERR}
!macroend


!define nsProcess::KillProcess `!insertmacro nsProcess::KillProcess`

!macro nsProcess::KillProcess _FILE _ERR
nsProcess::_KillProcess /NOUNLOAD `${_FILE}`
Pop ${_ERR}
!macroend

!define nsProcess::CloseProcess `!insertmacro nsProcess::CloseProcess`

!macro nsProcess::CloseProcess _FILE _ERR
nsProcess::_CloseProcess /NOUNLOAD `${_FILE}`
Pop ${_ERR}
!macroend


!define nsProcess::Unload `!insertmacro nsProcess::Unload`

!macro nsProcess::Unload
nsProcess::_Unload
!macroend

nsProcess DLL的实际上导出函数的名字是_FindProcess, _KillProcess, _CloseProcess, _Unload 前面的nsProcess::这个是根据文件名来变化的。所以解决这个问题有两个办法。

  1. 官方的方法:将nsProcessW.dll重命名为nsProcess.dll
  2. 另外一个方法是不修改nsProcessW.dll,将nsProcess.nsh文件里面的文本 nsProcess::_ 批量替换为nsProcessW::_

最后我想说看文档真的很重要啊!!

使用notepad++作为nsis编辑器

nsis充分的解释了什么叫“不重复造轮子”,就一个nsi script compiler,no IDE, no editor。以前一直用HM NIS EDIT,现对于专业的HM NIS EDIT而言,Notepad++有代码高亮、代码缩进的功能。HM NIS EDIT也是一个不错的编辑器,有专门用于生成NSIS脚本的图形化向导。但是HM NIS Edit很久没有更新了,自我感觉没有Notepad++用起来顺手。

在使用Notepad++的时候如果通过快捷键来调用nsis编辑器或直接调用编译好的安装包呢?方法如下:

1.在Notepad++主界面上按F5打开运行界面,输入"D:appNSISmakensisw.exe" "$(FULL_CURRENT_PATH)" (包含引号,假设NSIS安装在D:appNSIS目录下),然后保存快捷键使用和HM NIS Edit一样的Ctrl + F9

2.继续按F5输入"D:appoutSetup.exe",(假设这是安装包路径),快捷键输入F9

3.搞定。

使用notepad++作为nsis编辑器