用InstallShield进行ASP软件的打包和自动安装
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
#include "ifx.h" //不能移动[br]//////////////////////////////////////////////////////////////////////////////[br]// 用installshield 进行 asp 软件的打包和自动安装 [br]// 原创作者: 贾俊 (jaron)[br]// 网址: http://jiangdu.net[br]// 邮件: jaron@jdinfo.net[br]// 首次发表于网易,chinaasp,asphouse[br]//////////////////////////////////////////////////////////////////////////////[br]// 功能:[br]// 1.文件复制[br]// 2.可选自动设置独立站点运行(设置iis)[br]// 3.可选自动设置虚拟站点运行(设置iis)[br]// 4.设置目录可读,可写及可运行脚本[br]// 5.自动创建odbc[br]// 6.自动创建或附加mdf格式的sql数据库 并优化[br]// 7.自动安装 scriptencode 解码程序[br]// 本文仅列出了 installshield 的 script 部分,还有两个 vbs 文件及其他设置[br]// 测试过程中有任何问题,请来 http://jiangdu.net/bbs 编程空间版 讨论[br]//////////////////////////////////////////////////////////////////////////////[br]prototype createdatabase(string,string,string);[br]prototype createwebsite(string,string); // 创建 iis 站点[br]prototype createvirtualdir(string); // 创建虚拟目录
[p][/p] [p]//////////////////////////////////////////////////////////////////////////////[br]// [br]// 函数: onfirstuibefore [br]// [br]// 事件: firstuibefore event is sent when installation is run for the first[br]// time on given machine. in the handler installation usually displays[br]// ui allowing end user to specify installation parameters. after this[br]// function returns, componenttransferdata is called to perform file[br]// transfer.[br]// [br]///////////////////////////////////////////////////////////////////////////////[br]function onfirstuibefore() [br]number nresult,nsetuptype,nopt,svedit1,svedit2;[br]string sztitle, szmsg,szbmppath;[br]string szlicensefile, szquestion;[br]string szserverip,szserverport,szserveripdefault,szserverportdefault;[br]string szsqlsvr,szsqlusr,szsqlpwd,svsqlsvr,svsqlusr,svsqlpwd;[br]string svname, svcompany, svserial;[br]string szfile,sztargetpath,szdir,szfolder;[br]string szcomponents, sztargetdir;[br]string szfield1,szfield2;[br]string szdefault,svresult;[br]object piisobj;[br]list list,liststartcopy;[br]number nlevel,nvsize;[br]begin [/p] [p]szbmppath="c:"^"temp"^"left.bmp";[br]dialogsetinfo (dlg_info_altimage, szbmppath, true); // 设置左边的图片[br]//to do: if you want to enable background, window title, and caption bar title [br]//settitle( @title_main, 24, white );[br]//settitle( @title_captionbar, 0, backgroundcaption ); [br]//enable( fullwindowmode ); [br]//enable( background ); [br]//setcolor(background,rgb (0, 128, 128)); [/p] [p]//默认值设定[br]targetdir = "c:"^"inetpub"^"jaronsoft"^@folder_name; [br]szdir = targetdir;[br]shell_object_folder = @folder_name; [br]svname = "试用版用户";[br]svcompany = "jdinfo network";[br]svserial = "111-1111111"; [/p] [p]dlg_start:[br]// beginning of dialogs label[/p] [p]dlg_sdwelcome: //欢迎 对话框[br]sztitle = "欢迎进入";[br]szmsg = "";[br]nresult = sdwelcome( sztitle, szmsg );[br]if (nresult = back) goto dlg_start;[/p] [p]dlg_sdlicense://软件许可协议 对话框[br]szlicensefile = supportdir ^ "license.txt";[br]sztitle = "许可协议";[br]szmsg = "";[br]szquestion = "";[br]nresult = sdlicense( sztitle, szmsg, szquestion, szlicensefile );[br]if (nresult = back) goto dlg_sdwelcome;[/p] [p]dlg_sdshowinfolist://readme文件 对话框[br]szfile = supportdir ^ "infolist.txt";[br]list = listcreate( stringlist );[br]listreadfromfile( list, szfile );[br]sztitle = "readme";[br]szmsg = "";[br]nresult = sdshowinfolist( sztitle, szmsg, list ); [br]listdestroy( list );[br]if (nresult = back) goto dlg_sdlicense;[/p] [p]dlg_sdregisteruserex://用户信息 对话框[br]szmsg = "";[br]sztitle = "用户信息"; [br]nresult = sdregisteruserex( sztitle, szmsg, svname, svcompany, svserial );[br]if (nresult = back) goto dlg_sdshowinfolist;[br]//检查序列号[br]//if (chk_serial(svcompany, svserial)<0) then[br]//goto dlg_sdregisteruserex;[br]//endif;[br]//检查序列号完毕[br]dlg_sdaskdestpath://安装位置 对话框[br]sztitle = "检查序列号";[br]szmsg = "";[br]nresult = sdaskdestpath( sztitle, szmsg, szdir, 0 );[br]targetdir = szdir;[br]if (nresult = back) goto dlg_sdregisteruserex;[/p] [p]dlg_setuptype: //安装类型 对话框[br]nsetuptype = typical; [br]sztitle = "安装类型";[br]szmsg = "请选择您需要按哪种方式安装"; [br]nresult = setuptype ( sztitle , szmsg , "" , nsetuptype , 0 );[br]if (nresult = back) then[br]goto dlg_sdaskdestpath;[br]else[br]nsetuptype = nresult;[br]if (nsetuptype != custom) then[br]sztargetpath = targetdir;[br]nvsize = 0;[br]componentcomparesizerequired(media,sztargetpath,nvsize);[br]if (nvsize != 0) then [br]messagebox( szsdstr_notenoughspace, warning );[br]goto dlg_setuptype;[br]endif;[br]endif; [br]endif;[/p] [p]dlg_sdcomponenttree: //对话框[br]if ((nresult = back) && (nsetuptype != custom)) goto dlg_setuptype;[br]sztitle = "对话框";[br]szmsg = "";[br]sztargetdir = targetdir;[br]szcomponents = "";[br]nlevel = 2;[br]if (nsetuptype = custom) then[br]nresult = sdcomponenttree(sztitle, szmsg, sztargetdir, szcomponents, nlevel);[br]if (nresult = back) goto dlg_setuptype; [br]endif;[/p] [p]dlg_sdselectfolder://对话框[br]szfolder = shell_object_folder; [br]sztitle = "文件夹";[br]szmsg = "";[br]nresult = sdselectfolder( sztitle, szmsg, szfolder );[br]shell_object_folder = szfolder;[br]if (nresult = back) goto dlg_sdcomponenttree;[/p] [p][br]dlg_selmode ://设置数据库服务器 对话框[br]sztitle = "设置"+@product_name+"的运行模式";[br]szmsg = "请选择软件运行的方式,极力推荐使用独立站点方式运行";[br]szfield1="独立站点方式运行(自动创建新站点)"; [br]szfield2="虚拟目录方式运行(自动创建虚拟目录)";[br]svedit1=true;[br]svedit2=false;[br]setdialogtitle(dlg_ask_text,sztitle); [br]//dialogsetinfo ( dlg_info_checkselection, "", 1); [br]nopt = exclusive ;[br]nresult = askoptions (nopt,szmsg,szfield1,svedit1,szfield2,svedit2);[br]if (nresult = back) goto dlg_sdselectfolder;[br]if (svedit1=false) goto dlg_sdstartcopy;[/p] [p]dlg_asktext ://设置数据库服务器 对话框[br]sztitle = "设置iis信息服务及数据库服务器";[br]szmsg = "现在开始设置iis系统";[br]szquestion=" 请输入本服务器的主机名或ip地址,安装程序将按照您提供的资料设置iis信息服务。如果您没有填写,安装程序将自动跳过站点的创建!";[br]szserverip="地址:";[br]szserverport="端口:"; [br]szserveripdefault="192.168.0.1";[br]szserverportdefault="80";[br]setdialogtitle(dlg_ask_text,sztitle);[br]nresult=sdshowdlgedit2 (sztitle, szquestion,szserverip,szserverport,szserveripdefault,szserverportdefault);[br]if (nresult = back) goto dlg_selmode;[/p] [p]dlg_asksql ://设置数据库服务器 对话框[br]sztitle = "设置数据库";[br]szmsg = "现在开始设置microsoft sql server数据库系统";[br]szquestion=" 请输入sql server数据库服务器的用户名和密码,安装程序将按照您上步提供的ip地址和下面的用户名和密码创建和优化数据库系统。如果您提供的用户名和密码是错误的,安装程序将自动跳过数据的设置!";[br]szsqlsvr="主机名:";[br]szsqlusr="用户名:";[br]szsqlpwd="密码:"; [br]svsqlsvr="localhost";[br]svsqlusr="sa";[br]szsqlpwd="";[br]setdialogtitle(dlg_ask_text,sztitle);[br]nresult=sdshowdlgedit3 (sztitle, szquestion,szsqlsvr,szsqlusr,szsqlpwd,svsqlsvr,svsqlusr,svsqlpwd);[br]if (nresult = back) goto dlg_selmode;[/p] [p]dlg_sdstartcopy://开始复制文件 对话框[br]sztitle = "开始复制文件";[br]szmsg = "点击下一步开始复制文件";[br]liststartcopy = listcreate( stringlist );[br]listaddstring(liststartcopy,"用户名:"+svname,after);[br]listaddstring(liststartcopy,"公司名称:"+svcompany,after);[br]listaddstring(liststartcopy,"序列号:"+svserial,after);[br]listaddstring(liststartcopy,"目标目录:"+szdir,after);[br]if (svedit1=true) then[br]listaddstring(liststartcopy,"ip地址:"+szserveripdefault,after);[br]listaddstring(liststartcopy,"端口号:"+szserverportdefault,after);[br]endif;[br]listaddstring(liststartcopy,"请确认您填写的信息,按下一步开始复制文件",after);[br]nresult = sdstartcopy( sztitle, szmsg, liststartcopy ); [br]listdestroy(liststartcopy);[br]if (nresult = back) goto dlg_asktext;[br]// setup default status[br]setstatuswindow(0, "");[br]enable(statusex);[br]statusupdate(on, 100);[br]if (svedit1=true) then [br]createwebsite(szserveripdefault,szserverportdefault); // 开始创建 iis 站点[br]endif;[br]if (svedit2=true) then [br]createvirtualdir("netoa"); // 开始创建 iis 站点[br]endif;[br]createdatabase(svsqlsvr,svsqlusr,svsqlpwd); // 创建和优化数据库[/p] [p]return 0;[br]end;[br]//////////////////////////////////////////////////////////////////////////////[br]//[br]// 函数: onfirstuiafter[br]//[br]// 事件: firstuiafter event is sent after file transfer, when installation [br]// is run for the first time on given machine. in this event handler [br]// installation usually displays ui that will inform end user that[br]// installation has been completed successfully.[br]//[br]///////////////////////////////////////////////////////////////////////////////[br]function onfirstuiafter()[br]string sztitle,szmsg1, szmsg2, szoption1, szoption2,szcmdline;[br]number bopt1, bopt2;[/p] [p]begin[br]//set_vod_liveaddress();[/p] [p]szcmdline = supportdir ^"sce10chs.exe";[br]if (launchappandwait(szcmdline, " /q",wait) < 0) then[br]messagebox ("不能安装解码程序,请联系供应商.",severe);[br]endif;[/p] [p]disable(statusex);[br]bopt1 = false;[br]bopt2 = false;[br]szmsg1 = sdloadstring(ifx_sdfinish_msg1);[br]szmsg2 = "请浏览本主机web服务器上的 "+@product_name+" 虚拟目录\n\n 例:\n /";[br]szoption1 = "";[br]szoption2 = "";[br]sztitle = @product_name+"安装完成";[br]sdfinishex(sztitle,szmsg1,szmsg2,szoption1,szoption2,bopt1,bopt2);[/p] [p]szcmdline = "";[br]//if (launchapp(programfiles ^"internet explorer"^"iexplore.exe", szcmdline) < 0) then[br]//messagebox ("不能打开浏览器.",severe);[br]//endif;[/p] [p]return 0;[br]end;[/p] [p][br]//////////////////////////[br]// 创建iis站点[br]//////////////////////////[br]function createwebsite(szserveripdefault,szserverportdefault)[br]string szcmdline,szwaittxt;[br]begin[br]if ((szserveripdefault = "") || (szserverportdefault = "")) then [br]messagebox ("您没有设定"+@product_name+"运行的服务器ip地址或端口!!iis信息服务设置失败!\n请自行创建iis站点,并将主目录设为:"+targetdir,severe);[br]else[br]szwaittxt=" 正在创建iis和设置站点....";[br]sdshowmsg (szwaittxt, true);[br]delay(2);[br]szcmdline = supportdir ^"mkw3site.vbs"+" -r "+targetdir+" -i "+szserveripdefault+" -o "+szserverportdefault+" -t "+@product_name; [br]if (launchappandwait("wscript.exe", szcmdline,wait) < 0) then[br]messagebox ("不能建立web 虚拟目录,没有找到 wscript.exe 或执行脚本错误.",severe);[br]endif;[br]sdshowmsg (szwaittxt, false);[br]endif;[br]return 0;[br]end;[/p] [p]//////////////////////////[br]// 创建虚拟目录[br]//////////////////////////[br]function createvirtualdir(virtualfolder)[br]string szcmdline,szwaittxt;[br]begin[br]if (virtualfolder = "") then [br]messagebox ("没能读取到虚拟目录的名称!请联系系统供应商!"+targetdir,severe);[br]else[br]szwaittxt=" 正在创建"+@product_name+"的虚拟目录....";[br]sdshowmsg (szwaittxt, true);[br]delay(2);[br]szcmdline = supportdir ^"mkwebdir.vbs "+" -w 1 -v \""+virtualfolder+"\",\""+ targetdir+"\"" ;[br]if (launchappandwait("wscript.exe", szcmdline,wait) < 0) then[br]messagebox ("不能建立web 虚拟目录,没有找到 wscript.exe 或执行脚本错误.",severe);[br]endif;[br]sdshowmsg (szwaittxt, false);[br]endif;[br]return 0;[br]end;[/p] [p]//////////////////////////[br]// 创建和优化数据库[br]//////////////////////////[br]function createdatabase(svsqlsvr,svsqlusr,svsqlpwd)[br]string szcmdline,szwaittxt;[br]begin[br]szwaittxt=" 正在创建"+@product_name+"所需数据库....";[br]sdshowmsg (szwaittxt, true);[br]delay(2); [br]szcmdline = "/u "+svsqlusr+" /p "+svsqlpwd+" /s "+svsqlsvr+" /q \"exec sp_attach_db n'oasystem' , n'"+supportdir ^"oasystem_data.mdf'\"";[br]if (launchappandwait("osql.exe", szcmdline,wait) < 0) then[br]messagebox ("数据库创建失败!请确您的系统中已安装 microsoft sql server 2000.\n如仍无法解决,请联系系统供应商!",severe);[br]endif;[br]sdshowmsg (szwaittxt, false);[br]szwaittxt=" 正在优化"+@product_name+"系统数据库....";[br]sdshowmsg (szwaittxt, true);[br]delay(2); [br]szcmdline = "/u "+svsqlusr+" /p "+svsqlpwd+" /s "+svsqlsvr+" /q \"use oasystem ; exec sp_updatestats\"";[br]if (launchappandwait("osql.exe", szcmdline,wait) < 0) then[br]messagebox ("数据库优化失败!您可以在 sql查询分析器中执行 \n use oasystem ; exec sp_updatestats \n完成!",severe);[br]endif;[br]sdshowmsg (szwaittxt, false);[br]return 0;[br]end;[/p] 该文章在 2010/7/4 23:51:07 编辑过 |
关键字查询
相关文章
正在查询... |