LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

使用Installshield制作asp,asp.net应用的安装程序

admin
2010年8月19日 23:57 本文热度 3807

在使用asp,asp.net编写Web应用时,最大的烦恼莫过于程序的分发的部署,由于面向的最终用户,所以程序的安装的过程必须要简单,方便和快捷。


下面提供了Installshield的脚本,改脚本功能包括:


1,检测IIS是否安装


2,检测IE版本


3,自动建立SQL数据库


4,自动建立IIS虚拟目录


5,能读取注册表和INI文件


6,注册.dll组件


  应用程序开发环境:Windows2000+VS 2003+SQL2000


  制作安装程序环境:Installshield7.0(其实6.22以上都可以,只是中文语言包太难找,所以就用7.0了,另7.0界面也好看多了,XP风格)


////////////////////////////////////////////////////////////////////////////////


//


// File Name: Setup.rul


//


// Description: InstallShield script


//


// Comments: This script was generated based on the selections you made in


// the Project Wizard. Refer to the help topic entitled "Modify


// the script that the Project Wizard generates" for information


// on possible next steps.


//


////////////////////////////////////////////////////////////////////////////////


// Include header files


#include "ifx.h"


////////////////////// string defines ////////////////////////////


number xx1,xx2;


//////////////////// installation declarations ///////////////////


// ----- DLL function prototypes -----


// your DLL function prototypes


// ---- script function prototypes -----


// your script function prototypes


prototype CreateDataBase(STRING,STRING,STRING);//附加数据库


prototype CheckIIS(); //检测是否安装了iis


prototype Checkie(); //检测ie版本


prototype Checkmdac(); //检测mdac版本


prototype regcom(); //注册jamil组件


// prototype deliis(STRING);//删除虚拟目录


prototype Writeini(STRING,STRING,STRING);


prototype DelDataBase(STRING,STRING,STRING);


// your global variables


//////////////////////////////////////////////////////////////////////////////


//


// FUNCTION: OnFirstUIBefore


//


// EVENT: FirstUIBefore event is sent when installation is run for the first


// time on given machine. In the handler installation usually displays


// UI allowing end user to specify installation parameters. After this


// function returns, FeatureTransferData is called to perform file


// transfer.


//


///////////////////////////////////////////////////////////////////////////////


function OnFirstUIBefore()


// number nResult,nSetupType;


// string szTitle, szMsg;


// string szLicenseFile, szQuestion;


// string szName, szCompany;


// string szTargetPath;


// string szDir;


// string szFeatures, szTargetdir;


// number nLevel;


// LIST listStartCopy;


//number nvSize;


//number nUser;


number nResult,nSetupType;


string szTitle, szMsg;


string szLicenseFile, szQuestion;


string szName, szCompany, szSerial;


string szFeatures, szTargetdir;


number nLevel;


LIST listStartCopy,list;


number nvSize;


number nUser;


number nOpt,svEdit1,svEdit2;


STRING szServerIP,szServerPort,szServerIPDefault,szServerPortDefault;


STRING szSQLsvr,szSQLusr,szSQLpwd,svSQLsvr,svSQLusr,svSQLpwd;


STRING svName, svCompany, svSerial;


STRING szFile,szTargetPath,szDir,szfolder;


STRING szField1,szField2;


STRING szDefault,svResult;


string szComponents;


OBJECT piisObj;


STRING szTitle1;


STRING szMsg1,szMsg2;


STRING szMsg11, szMsg12, szOpt1, szOpt2;


BOOL bvOpt1, bvOpt2;


begin


// TO DO: if you want to enable background, window title, and caption bar title


//SetTitle( @PRODUCT_NAME, 24, WHITE );


// SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );


// Enable( FULLWINDOWMODE );


// Enable( BACKGROUND );


// SetColor(BACKGROUND,RGB (0, 128, 128));


//SetFont (FONT_TITLE, STYLE_NORMAL, "宋体");


SHELL_OBJECT_FOLDER = @PRODUCT_NAME;


nSetupType = TYPICAL;


szDir = INSTALLDIR;


szName = "";


szCompany = "";


Dlg_Start:


// beginning of dialogs label


Dlg_SdWelcome:


szTitle = "";


szMsg = "";


nResult = SdWelcome( szTitle, szMsg );


if (nResult = BACK) goto Dlg_Start;


Dlg_SdLicense:


szLicenseFile = SUPPORTDIR ^ "license.txt";


szTitle = "";


szMsg = "";


szQuestion = "";


nResult = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );


if (nResult = BACK) goto Dlg_SdWelcome;


Dlg_SdCustomerInformation:


szMsg = "";


szTitle = "";


nResult = SdCustomerInformation( szTitle, szName, szCompany, nUser );


if (nResult = BACK) goto Dlg_SdLicense;


Dlg_SdAskDestPath:


szTitle = "";


szMsg = "";


nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );


INSTALLDIR = szDir;


if (nResult = BACK) goto Dlg_SdCustomerInformation;


Dlg_SelMode ://设置数据库服务器 对话框


szTitle = "是否安装.net框架";


szMsg = "是否要安装.net框架,如果已经安装了.net框架则不需要安装。";


szField1="我要安装.net框架。";


szField2="我已经安装了,不需要再安装。";


svEdit1=TRUE;


svEdit2=FALSE;


SetDialogTitle(DLG_ASK_TEXT,szTitle);


//DialogSetInfo ( DLG_INFO_CHECKSELECTION, "", 1);


nOpt = EXCLUSIVE ;


nResult = AskOptions (nOpt,szMsg,szField1,svEdit1,szField2,svEdit2);


if (nResult = BACK) goto Dlg_SdAskDestPath;


if (svEdit1=TRUE)then


if Checkmdac() then//如果已经安装则跳过


if(LaunchAppAndWait (SUPPORTDIR^"mdac_typ.exe","",WAIT)<0) then


MessageBox ("安装微软数据访问组件是发生以外,请重新安装。",SEVERE);


goto Dlg_SelMode;


endif;


endif;


if(LaunchAppAndWait ( SUPPORTDIR ^"dotnetfx.exe " , "" ,WAIT)<0) then


MessageBox ("安装.net框架时发生意外,请重新安装。",SEVERE);


goto Dlg_SelMode;


endif;


endif;


Dlg_SetupType:


szTitle = "";


szMsg = "";


nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 );


if (nResult = BACK) then


goto Dlg_SdAskDestPath;


else


nSetupType = nResult;


if (nSetupType != CUSTOM) then


szTargetPath = INSTALLDIR;


nvSize = 0;


FeatureCompareSizeRequired(MEDIA,szTargetPath,nvSize);


if (nvSize != 0) then


MessageBox( szSdStr_NotEnoughSpace, WARNING );


goto Dlg_SetupType;


endif;


endif;


endif;


Dlg_SdFeatureTree:


if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;


szTitle = "";


szMsg = "";


szTargetdir = INSTALLDIR;


szFeatures = "";


nLevel = 2;


if (nSetupType = CUSTOM) then


nResult = SdFeatureTree(szTitle, szMsg, szTargetdir, szFeatures, nLevel);


if (nResult = BACK) goto Dlg_SetupType;


endif;


Dlg_AskText ://设置数据库服务器 对话框


szTitle = "设置IIS信息服务及数据库服务器";


szMsg = "现在开始设置IIS系统";


szQuestion=" 请输入本服务器的主机名或IP地址,安装程序将按照您提供的资料设置IIS信息服务。如果您没有填写,安装程序将自动跳过站点的创建!";


szServerIP="地址:";


szServerPort="端口:";


szServerIPDefault="192.168.0.1";


szServerPortDefault="80";


SetDialogTitle(DLG_ASK_TEXT,szTitle);


nResult=SdShowDlgEdit2 (szTitle, szQuestion,szServerIP,szServerPort,szServerIPDefault,szServerPortDefault);


if (nResult = BACK) goto Dlg_SetupType;


Dlg_AskSQL ://设置数据库服务器 对话框


szTitle = "设置数据库";


szMsg = "现在开始设置数据库系统";


szQuestion=" 请输入数据库服务器的用户名和密码,安装程序将按照您上步提供的IP地址和下面的用户名和密码创建和优化数据库系统。如果您提供的用户名和密码是错误的,安装程序将自动跳过数据的设置!";


//szSQLsvr="主机名:";


szSQLusr="用户名:";


szSQLpwd="密码:";


//svSQLsvr="localhost";


svSQLusr="sa";


svSQLpwd="";


SetDialogTitle(DLG_ASK_TEXT,szTitle);


nResult=SdShowDlgEdit2 (szTitle, szQuestion,szSQLusr,szSQLpwd,svSQLusr,svSQLpwd);


if (nResult = BACK) goto Dlg_AskText;


Dlg_SdStartCopy:


szTitle = "";


szMsg = "";


szTitle1 = "安装失败";


szMsg11 = "由于安装时发生意外导致安装失败";


szMsg12 = "点击完成退出安装。";


szOpt1 = "";


szOpt2 ="";


listStartCopy = ListCreate( STRINGLIST );


ListAddString(listStartCopy,"用户名:"+szName,AFTER);


ListAddString(listStartCopy,"公司名称:"+szCompany,AFTER);


ListAddString(listStartCopy,"目标目录:"+szDir,AFTER);


if (svEdit1=TRUE) then


ListAddString(listStartCopy,"IP地址:"+szServerIPDefault,AFTER);


ListAddString(listStartCopy,"端口号:"+szServerPortDefault,AFTER);


endif;


ListAddString(listStartCopy,"请确认您填写的信息,按下一步开始复制文件",AFTER);


// listStartCopy = ListCreate( STRINGLIST );


//The following is an example of how to add a string(szName) to a list(listStartCopy).


//eg. ListAddString(listStartCopy,szName,AFTER);


nResult = SdStartCopy( szTitle, szMsg, listStartCopy );


ListDestroy(listStartCopy);


if (nResult = BACK) goto Dlg_SdFeatureTree;


Enable(STATUSEX);


if CheckIIS() then


if(xx1=2) goto Dlg_AskText; //判断站点是否建立成功


// regcom();//注册组件


CreateDataBase(szServerIPDefault,svSQLusr,svSQLpwd); // 创建和 优化数据库


Writeini(szServerIPDefault,svSQLusr,svSQLpwd);//写ini文件


else


MessageBox ("你的计算机没有安装IIS!请安装后重试!",SEVERE);


endif;


return 0;


end;


///////////////////////////////////////////////////////////////////////////////


//


// FUNCTION: OnMaintUIBefore


//


// EVENT: MaintUIBefore event is sent when end user runs installation that


// has already been installed on the machine. Usually this happens


// through Add/Remove Programs applet. In the handler, installation


// usually displays UI allowing end user to modify existing installation


// or uninstall application. After this function returns,


// FeatureTransferData is called to perform file transfer.


//


///////////////////////////////////////////////////////////////////////////////


function OnMaintUIBefore()


NUMBER nResult, nType;


STRING szTitle, szMsg, svDir, svResult, szCaption;


STRING svip,svuser,svpass;


begin


// TO DO: if you want to enable background, window title, and caption bar title


// SetTitle( @PRODUCT_NAME, 24, WHITE );


// SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );


// SetColor(BACKGROUND,RGB (0, 128, 128));


// Enable( FULLWINDOWMODE );


// Enable( BACKGROUND );


Dlg_Start:


Disable(BACKBUTTON);


nType = SdWelcomeMaint(szTitle, szMsg, MODIFY);


Enable(BACKBUTTON);


if (nType = REMOVEALL) then


svResult = SdLoadString(IFX_MAINTUI_MSG);


szCaption = SdLoadString(IFX_ONMAINTUI_CAPTION);


nResult = SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult);


if (nResult = IDCANCEL) goto Dlg_Start;


endif;


nResult = NEXT;


Dlg_SdFeatureTree:


if (nType = MODIFY) then


szTitle = "";


szMsg = "";


nResult = SdFeatureTree(szTitle, szMsg, INSTALLDIR, "", 2);


if (nResult = BACK) goto Dlg_Start;


endif;


switch(nType)


case REMOVEALL: FeatureRemoveAll();


case REPAIR: FeatureReinstall();


endswitch;


GetProfString (SystemFolder^"dbconn.ini", "dbconnection","ip", svip);


GetProfString (SystemFolder^"dbconn.ini", "dbconnection","db_user", svuser);


GetProfString (SystemFolder^"dbconn.ini", "dbconnection","db_pass", svpass);


//svall=svip+","+svuser+","+svpass;


// SdShowMsg(svall,WAIT);


// Delay(5);


DelDataBase(svip,svuser,svpass);


DeleteFile (INSTALLDIR^"database\\kill.out");


Enable(STATUSEX);


end;


//////////////////////////


// 创建和优化数据库


//////////////////////////


function CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd)


STRING szCmdLine1,szWaitTxt,szdatabase,szdatabase1,path,path1,path3;


begin


path=INSTALLDIR^"database\\fenoffice.mdf";


path3=INSTALLDIR^"database\\fenoffice_log.ldf";


szWaitTxt=" 正在创建数据库....";


SdShowMsg (szWaitTxt, TRUE);


Delay(2);


//CopyFile(SUPPORTDIR^"kill.sql",INSTALLDIR^"database\\kill.sql");


CopyFile(SUPPORTDIR^"fenoffice.mdf",INSTALLDIR^"database\\fenoffice.mdf");


CopyFile(SUPPORTDIR^"fenoffice_log.ldf",INSTALLDIR^"database\\fenoffice_log.ldf");


//szCmdLine="hello";


szdatabase = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q \"exec sp_attach_db N'fenoffice' , N'"+path+"',N'"+path3+"'\"";


//SdShowMsg(szdatabase,WAIT);


//Delay(3);


if (LaunchAppAndWait("osql.exe", szdatabase,WAIT)<0) then;


MessageBox ("数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000.\n如仍无法解决,请联系系统供应商!",SEVERE);


endif;


path1=INSTALLDIR^"database";


//szdatabase1=" -S "+svSQLusr+" -U "+svSQLusr+" -P "+svSQLpwd+" -d master -n -i "+path1+"\\kill.sql -o "+path1+"\\kill.out";


//SdShowMsg(szdatabase2,WAIT);


//Delay(3);


if (LaunchAppAndWait("osql.exe", szdatabase1,WAIT)<0) then


MessageBox ("配置数据库失败!请尝试手动配置!",SEVERE);


endif;


SdShowMsg (szWaitTxt, FALSE);


return 0;


end;


//


//


//检测是否安装了iis


//


//


function CheckIIS()


NUMBER nvType, nvSize;


STRING svvalue;


begin


RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );


if (RegDBKeyExist ("System\\CurrentControlSet\\Services\\IISADMIN" ) = 1) then


return (1);


else


return (0);


endif;


end;


//


//


//检测ie的版本


//


//


function Checkie()


NUMBER nvType, nvSize;


STRING svvalue,szKey,szName;


begin


szKey="SOFTWARE\\Microsoft\\Internet Explorer";


szName="version";


RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );


RegDBGetKeyValueEx(szKey, szName, nvType, svvalue, nvSize );


if(svvalue="6.0.2600.0000")then


return (0);


else


return (1);


endif;


end;


//


//检测mdac的版本


//


//


function Checkmdac()


NUMBER nvType, nvSize;


STRING svvalue,szKey,szName;


begin


szKey="SOFTWARE\\Microsoft\\DataAccess";


szName="version";


RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );


RegDBGetKeyValueEx(szKey, szName, nvType, svvalue, nvSize );


if(svvalue="2.71.9030.9") then


return (0);


else


return (1);


endif;


end;


//


//


//Write dbconn.ini file


//


//


function Writeini(svSQLsvr,svSQLusr,svSQLpwd)


string svDate,iniFile,svResult,szInfo,szWaitTxt;


NUMBER nvResult;


begin


//szWaitTxt="正在配置系统文件,请稍侯....";


iniFile =SUPPORTDIR^"dbconn.ini";


//SdShowMsg (szWaitTxt, TRUE);


// Delay(2);


if (GetSystemInfo (DATE, nvResult, svResult) < 0) then


szInfo = "不能得到系统时间";


else


svDate=svResult+" ";


endif;


if (GetSystemInfo (TIME, nvResult, svResult) < 0) then


szInfo = "不能得到系统时间";


else


svDate=svDate+svResult;


endif;


if (WriteProfString(iniFile,"dbconnection","server", svSQLsvr) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"dbconnection","ip", svSQLsvr) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"dbconnection","db_user",svSQLusr) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"dbconnection","db_pass",svSQLpwd) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"dbconnection","database", "fenoffice") <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"webwork","webworkstart", svDate) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


if (WriteProfString(iniFile,"webwork","webworkpath", INSTALLDIR) <0) then


MessageBox("dbconn.ini错误,系统将无法运行!", SEVERE);


endif;


CopyFile(SUPPORTDIR^"dbconn.ini",SystemFolder^"dbconn.ini");


end;


//


//注册组件


//


function regcom()


string szLine,szWaitTxt;


begin


szLine=SystemFolder^"jmail.dll";


szWaitTxt=" 正在注册组件....";


SdShowMsg (szWaitTxt, TRUE);


Delay(2);


CopyFile(SUPPORTDIR^"jmail.dll",SystemFolder^"jmail.dll");


if (LaunchAppAndWait("regsvr32.exe",szLine,WAIT)<0) then


MessageBox ("注册组件失败,请尝试手动注册"+szLine,SEVERE);


// else


// MessageBox ("注册组件成功!"+szLine,INFORMATION);


//SdShowMsg (szLine, TRUE);


// Delay(3);


endif;


end;


//function deliis(VirtualFolder)


//STRING szCmdLine;


//begin


//删除已经存在的虚拟目录


// szCmdLine = SUPPORTDIR ^"adsutil.vbs delete w3svc/1/root/"^VirtualFolder;


// if(LaunchAppAndWait("CScript.exe", szCmdLine, WAIT)<0) then


// MessageBox ("设置iis信息服务失败,请尝试手动配置!",INFORMATION);


// endif;


//end;


//


//删除数据库


//


//


function DelDataBase(server,user,pass)


STRING szWaitTxt,szdatabase1,szdatabase2,szdatabase3,path1;


begin


szWaitTxt=" 正在删除数据库....";


szdatabase2 = "/U "+user+" /P "+pass+" /Q \" exec killspid N'fenoffice'";


LaunchAppAndWait("osql.exe", szdatabase2,WAIT);


//SdShowMsg(szdatabase2,WAIT);


//Delay(3);


szdatabase3 = "/U "+user+" /P "+pass+" /Q \" exec sp_dbremove N'fenoffice'" ;


LaunchAppAndWait("osql.exe", szdatabase3,WAIT);


//SdShowMsg(szdatabase3,WAIT);


//Delay(3);


SdShowMsg (szWaitTxt, FALSE);


return 0;


end;


该文章在 2010/8/19 23:57:35 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved