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

    技术2022-05-11  130

    在使用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;


    最新回复(0)