需求是这样的:
1.制作一个向导,安装一个应用程序(Control.exe),这个程序调用另一个程序(Sam.exe)的同时,传递一个参数进去(new_1.Vip)。
2.制作向导的脚本会向Control.exe传递一个参数,如果参数和Control.exe中的参数相同,那么就可以调用Sam.exe,
(现在不用管参数怎么传,参数是什么,如何比较等,后面会讲解)。
一,使用HM NIS Edit生成一个向导,文件->新建脚本:向导,然后一直下一步也行,但要注意两点:
(1)5/9页,应用程序文件,在建立自己的应用程序时要删除掉两个模板自带的两个文件,选中,点击 “×” 那个按钮即可。
(2)6/9页,下部的快捷方式,就是字面上的意思,他们是一 一对应的,比如桌面的快捷方式对应 $INSTDIR\Sam.exe。可以双击,选择修改。
下面是一个指令:ExecShell。
这是说明和例子,来源于NSIS Reference。
action command [parameters] [SW_SHOWDEFAULT | SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]
ExecShell "open" "http://nsis.sf.net/" ExecShell "open" "$INSTDIR\readme.txt" ExecShell "print" "$INSTDIR\readme.txt"
ExecShell " " "$INSTDIR\Control.exe" "ShellCmd " SW_HIDN ;ShellCmd 只是一个字符串,无其他特殊意思
ExecShell :指令;
" " : 这个是可以为空的,具体有哪些参数上文档看;
"$INSTDIR\Control.exe" :指令执行的应用程序名称;
"ShellCmd " : 传入的参数(怎么得到的后面说明),可以是多个参数,如: ' "aaa" "bbb" "aa bb cc" ' ,,每一个 " " 括起来的算是一个字符(空格也是一个字符,不是分隔符)。所以上面有三个参数:"aaa" "bbb" 和 " aa bb cc"。
SW_HIDN :这个位置的参数可以有几种。具体的就不这儿说明了。
vs部分:这部分已经假定读者对Unicode字符集和LPSTR,LPWSTR,LPCWSTR,LPCSTR,以及TCHAR有一定了解,
了解window API,后面会使用到WritePrivateProfileString,和GetPrivateProfileString以及ShellExecute。
建项目部分直接过:
int APIENTRY_tWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,//得到ExecShell传入和参数:ShellCmd ,
int nCmdshow
)
{
//do something;
}
lpCmdLine中的数据使用这种方式提取出来:
int nArgs;
LPWSTR *szArglist = CommanLineToArgvW(GetCommandLineW(),&nArgs);//GetCommandLineW()作用搜一下就有了。
for(int i=1;i<nArgs;i++)
{
if(_wcsicmp( L"_Yes",szArglist[i] ) ==0)//_wcsicmp是比较两个字符串是否相等,相等则返回 0 .
{
//do something;
}
}
先到这儿了。
------------------------------------------------------------------------- 后面还没写好-------------------------------------------------------------------
对ini文件的操作:WritePrivateProfileString,和GetPrivateProfileString
参数详细说明看文档或者搜一下。
说明一下:
ini文件结构是这样的:
[节名]
键名 = 键值
WritePrivateProfileString:执行写入ini文件某个键的键值的操作,
_T(" "):可以根据环境选择是Unicode合适Anis(可以了解一下Unicode)。
WritePrivateProfileString(_T("StudentInfo"),_T("Name"),_T("strName"),_T("c:\\asd.ini"));
说明:StudentInfo :ini文件节名
Name :欲修改的键名
strName :欲修改的键名的键值
c:\\asd.ini:修改操作的ini文件路径
GetPrivateProfileString:读取ini文件中某个键 的键值的操作。
GetPrivateProfileString("NETWORK","ServerIP","", ip,sizeof(ip), "Server.ini");
说明:NETWORK:ini文件节名
ServerIP:欲修改的键名
strName :欲修改的键名的键值
c:\\asd.ini:修改操作的ini文件路径