NSIS 检测安装路径是否含有中文
问题描述
因为工作的需要,最近学习用NSIS来打包软件。因为考虑到软件的安装路径如果包含中文,会影响到软件里面数据库的运行,所以需要在安装软件时,检测安装路径是否包含中文。步骤概括
- VS2010编写检测中文的.dll文件 。因为NSIS对string类型操作有限,实现起来比较麻烦,换用VS写个动态库的方式比较方便(大佬不喜勿喷,欢迎分享);
- 在NSIS脚本中调用.dll 。把安装路径传入.dll做判断,并返回结果到脚本;
注意:步骤比较简单,细节比较多,看了N篇博文,总结出来的方法,请看下去哦!
详细步骤
一. VS2010编写检测中文的.dll文件
我用VS2010中的是MFC DLL模板(本来是准备在.dll中做一个messagebox,但是后来做在了NSIS脚本里面)。
1.项目目录:
先上图。我把项目命名为NSIS_dll,DLL的类型选择为使用共享MFC DLL的规则DLL(至于为什么选择这个,大家可以自己百度下区别)。创建成功后项目自带 “NSIS_dll.h”、“Resource.h”、“stdafx.h”、“NSIS_dll.cpp”、“NSIS_dll.def”、“stdafx.cpp”。而另外的 “api.h”、“nsis_tchar.h”、“pluginapi.h"三个文件,需要到你安装的NSIS文件下的Examples\Plugin\nsis中寻找到,并添加到项目头文件里。添加方法:右键头文件---->添加---->现有项。
注意:添加这三个头文件是必须的,要不然会在编译时报出寻找不到插件的错误!相当于NSIS提供的一个自定义插件模板吧。
然后在源文件“NSIS_dll.cpp”中把三个头文件包含进去
#include "api.h"
#include "nsis_tchar.h"