使用InstallShield制作ASP安装程序

使用InstallShield制作ASP安装程序(1)
   浏览选项:     
我现在在做ASP的安装程序,这样可以方便用户的使用。我使用的InstallShield版本是InstallShield Professional?Standard Edition6.3。
  我没有用过这个东东,问题如下:

问题一
  通过Project Wizard-generated script 做好了COPY打包工作。可是6.3版本的好象不支持主体Program...Endprogram,因为我看COPY打包的Script脚本就是通过两个Fuction实现的。所以我的脚本加不进去,除非在这两个Fuction中调用!请问是不是6.3版本不能使用Program...Endprogram,如果可以使用的话,应该如何去用?

问题二
  想在COPY完ASP程序后直接实现IIS的设置,也就是通过安装程序就可以完成,不需要手动设置,请问怎样去实现呢?

以下就是我用Project Wizard-generated script 做好的两个Fuction,他们不用调用也不用声明定义就自动执行,真是搞不懂呀!我的Script该加在什么地方呢?
// Include header files
    
#include "ifx.h"
function OnFirstUIBefore()
    number  nResult,nSetupType;
    string  szTitle, szMsg;
    string  szLicenseFile, szQuestion;
    string  szName, szCompany, szSerial;
    string  szTargetPath;
    string  szDir;
    string  szComponents, szTargetdir;
    number  nLevel;
    LIST    listStartCopy;
    number  nvSize;
begin
    nSetupType = TYPICAL;
    TARGETDIR = "C:"^"inetpub" ^"wwwroot" ^@PRODUCT_NAME;
    szDir = TARGETDIR;
    szName    = "";
    szCompany = "";
    szSerial = "";

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_SdRegisterUserEx:
    szMsg  = "";
    szTitle = "";
    nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );
    if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SdAskDestPath:
    szTitle = "";
    szMsg  = "please select setup folder";
    nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
    TARGETDIR = szDir;  
    if (nResult = BACK) goto Dlg_SdRegisterUserEx;

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 = TARGETDIR;
      nvSize = 0;
      ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
      if (nvSize != 0) then      
              MessageBox( szSdStr_NotEnoughSpace, WARNING );
          goto Dlg_SetupType;
            endif;
        endif;  
    endif;

Dlg_SdComponentTree:
    if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;
    szTitle    = "";
    szMsg      = "";
    szTargetdir = TARGETDIR;
    szComponents = "";
    nLevel = 2;
    if (nSetupType = CUSTOM) then
    nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel);
    if (nResult = BACK) goto Dlg_SetupType;  
    endif;

Dlg_ObjDialogs:
    nResult = ShowObjWizardPages(nResult);
    if (nResult = BACK) goto Dlg_SdComponentTree;
    
Dlg_SdStartCopy:
    szTitle = "";
    szMsg  = "";
    listStartCopy = ListCreate( STRINGLIST );
    nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
    ListDestroy(listStartCopy);      
    if (nResult = BACK) goto Dlg_ObjDialogs;

    // setup default status
    SetStatusWindow(0, "");
    Enable(STATUSEX);
    StatusUpdate(ON, 100);
    return 0;
end;

///
//
//  FUNCTION:  OnMoving
//
//  EVENT:      Moving event is sent when file transfer is started as a result of
//              ComponentTransferData call, before any file transfer operations
//              are performed.
//
///
function OnMoving()
    string szAppPath;
begin
    szAppPath = TARGETDIR;
    RegDBSetItem(REGDB_APPPATH, szAppPath);
    RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);
end;
// --- include script file section ---


----------------------------------------------------------------------

使用InstallShield制作ASP安装程序(2)
   浏览选项:     
6.3版好象是用事件驱动的:
//
//
// 函数: OnFirstUIBefore
//
// 事件: 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, ComponentTransferData is called to perform file
// transfer.
//
///

OnFirstUIBefore()是在某台电脑上第一次运行安装时执行.

//
//
// 函数: OnFirstUIAfter
//
// 事件: FirstUIAfter event is sent after file transfer, when installation
// is run for the first time on given machine. In this event handler
// installation usually displays UI that will inform end user that
// installation has been completed successfully.
//
///
OnFirstUIAfter()在文件复制结束后运行.

----------------------------------------------------

使用InstallShield制作ASP安装程序(3)
   浏览选项:     
下面是建立WEB文件和设置的例子需VBS文件(有虚拟目录设置,但没有权限设置).


//
// IIIIIII SSSSSS
// II SS InstallShield (R)
// II SSSSSS (c) 1996-1999, InstallShield Software Corporation
// II SS (c) 1990-1996, InstallShield Corporation
// IIIIIII SSSSSS All Rights Reserved.
//
//
// This code is generated as a starting setup template. You should
// modify it to provide all necessary steps for your setup.
//
//
// 文件名: Setup.rul
//
// 描述: InstallShield script
//
// 注释: This template script performs a basic setup. With minor
// modifications, this template can be adapted to create
// new, customized setups.
//



// 包含的头文件

#include "ifx.h" //不能移动

// string defines

installation declarations ///

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



// your DLL function prototypes

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


// your script function prototypes
prototype CHK_serial(STRING,STRING);
prototype RegODBC(STRING);
prototype set_vod_liveaddress();
// your global variables
STRING szvodservername;
STRING szliveservername;



//
//
// 函数: OnFirstUIBefore
//
// 事件: 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, ComponentTransferData is called to perform file
// transfer.
//
///
function OnFirstUIBefore()
NUMBER nResult,nSetupType;
STRING szTitle, szMsg;
STRING szLicenseFile, szQuestion;
STRING svName, svCompany, svSerial;
STRING szFile;
STRING szTargetPath;
STRING szDir;
STRING szfolder;
STRING szComponents, szTargetdir;
//zy
STRING szDefault,svResult;
STRING sDBSERVERNAME;
OBJECT piisObj;
//zy
NUMBER nLevel;
LIST listStartCopy;
LIST list;
NUMBER nvSize;
STRING msg;
begin


//To Do: if you want to enable background, window title, and caption bar title
// SetTitle( @TITLE_MAIN, 24, WHITE );
// SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );
// Enable( FULLWINDOWMODE );
// Enable( BACKGROUND );
// SetColor(BACKGROUND,RGB (0, 128, 128));




nSetupType = TYPICAL;
TARGETDIR = "D:/"^"cyclone2000/";
szDir = TARGETDIR;
SHELL_OBJECT_FOLDER = @FOLDER_NAME;
svName = "";
svCompany = "";
svSerial = "";

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_SdShowInfoList://readme文件 对话框
szFile = SUPPORTDIR ^ "infolist.txt";
list = ListCreate( STRINGLIST );
ListReadFromFile( list, szFile );
szTitle = "";
szMsg = "";
nResult = SdShowInfoList( szTitle, szMsg, list );
ListDestroy( list );
if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SdRegisterUserEx://用户信息 对话框
szMsg = "";
szTitle = "";
nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial );
if (nResult = BACK) goto Dlg_SdShowInfoList;
//检查序列号
if (CHK_serial(svCompany, svSerial)<0) then
goto Dlg_SdRegisterUserEx;
endif;
//检查序列号完毕
Dlg_SdAskDestPath://安装位置 对话框
szTitle = "";
szMsg = "";
nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
TARGETDIR = szDir;
if (nResult = BACK) goto Dlg_SdRegisterUserEx;

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 = TARGETDIR;
nvSize = 0;
ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
if (nvSize != 0) then
MessageBox( szSdStr_NotEnoughSpace, WARNING );
goto Dlg_SetupType;
endif;
endif;
endif;

Dlg_SdComponentTree: //对话框
if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;
szTitle = "";
szMsg = "";
szTargetdir = TARGETDIR;
szComponents = "";
nLevel = 2;
if (nSetupType = CUSTOM) then
nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel);
if (nResult = BACK) goto Dlg_SetupType;
endif;

Dlg_SdSelectFolder://对话框
szfolder = SHELL_OBJECT_FOLDER;
szTitle = "";
szMsg = "";
nResult = SdSelectFolder( szTitle, szMsg, szfolder );
SHELL_OBJECT_FOLDER = szfolder;
if (nResult = BACK) goto Dlg_SdComponentTree;

Dlg_AskText ://设置数据库服务器 对话框
szTitle = "设置数据库服务器";
szMsg = "";
szQuestion="请输入SQL SERVER(旋风2000)数据库服务器的主机名或IP地址";
szDefault="192.168.0.1";
SetDialogTitle(DLG_ASK_TEXT,szTitle);
nResult = AskText (szQuestion, szDefault, svResult);
sDBSERVERNAME = svResult;
if (nResult = BACK) goto Dlg_SdSelectFolder;
RegODBC(sDBSERVERNAME);

Dlg_SdStartCopy://开始复制文件 对话框
szTitle = "";
szMsg = "";
listStartCopy = ListCreate( STRINGLIST );
//The following is an example of how to add a string(svName) to a list(listStartCopy).
//eg. ListAddString(listStartCopy,svName,AFTER);
nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
ListDestroy(listStartCopy);
if (nResult = BACK) goto Dlg_AskText;
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);

return 0;

end;
//
//
// 函数: OnFirstUIAfter
//
// 事件: FirstUIAfter event is sent after file transfer, when installation
// is run for the first time on given machine. In this event handler
// installation usually displays UI that will inform end user that
// installation has been completed successfully.
//
///
function OnFirstUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szCmdLine;
NUMBER bOpt1, bOpt2;

begin
szCmdLine = SUPPORTDIR ^"mkwebdir.vbs "+"-c LocalHost -w 1 -v cyclone2000 -d "+ TARGETDIR ;
if (LaunchAppAndWait("WScript.exe", szCmdLine,WAIT) < 0) then
MessageBox ("不能建立WEB 虚拟目录.",SEVERE);
endif;
set_vod_liveaddress();
szCmdLine = SUPPORTDIR ^"odbc.reg";
if (LaunchAppAndWait("regedit.exe", szCmdLine,WAIT) < 0) then
MessageBox ("不能配置ODBC.",SEVERE);
endif;
Disable(STATUSEX);
bOpt1 = FALSE;
bOpt2 = FALSE;
szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);
szMsg2 = "请浏览本主机WEB服务器上的 cyclone2000 虚拟目录 例: http://Localhost/cyclone2000/default.htm";
szOption1 = "";
szOption2 = "";
szTitle = "旋风2000安装完成";
SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);

szCmdLine = "http://LocalHost/cyclone2000/default.htm";
if (LaunchApp(PROGRAMFILES ^"Internet Explorer"^"IEXPLORE.EXE", szCmdLine) < 0) then
MessageBox ("不能打开浏览器.",SEVERE);
endif;

return 0;
end;

///
//


  --------------------------------------

使用InstallShield制作ASP安装程序(4)
   浏览选项:     
///
//
// FUNCTION: OnMaintUIAfter
//
// EVENT: MaintUIAfter event is sent after file transfer, 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 that will inform
// end user that maintenance/uninstallation has been completed successfully.
//
///
function OnMaintUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
NUMBER bOpt1, bOpt2;
begin
Disable(STATUSEX);
bOpt1 = FALSE;
bOpt2 = FALSE;
szMsg1 = SdLoadString(IFX_SDFINISH_MAINT_MSG1);
szMsg2 = "";
szOption1 = "";
szOption2 = "";
szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);
SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
return 0;
end;

///
//
// FUNCTION: OnMoving
//
// EVENT: Moving event is sent when file transfer is started as a result of
// ComponentTransferData call, before any file transfer operations
// are performed.
//
///
function OnMoving()
STRING szAppPath;
begin
// Set LOGO Compliance Application Path
// TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder
szAppPath = TARGETDIR;
RegDBSetItem(REGDB_APPPATH, szAppPath);
RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);

end;

// --- include script file section ---


function LoginSQL( szTitle,szSqlsvname,szSqluser,szSqlpassword )

STRING szDlg, szTemp;
NUMBER bDone, nId, nMessage, nTemp;
INT hwndDlg;
HWND hwndControl;
begin
szDlg = "DLG_LoginSQLSV";

// record data produced by this dialog
if (MODE=SILENTMODE) then
SdMakeName( szAppKey, szDlg, szTitle, nLoginSQL );
SilentReadData( szAppKey, "Result", DATA_NUMBER, szTemp, nId );
if ((nId != BACK) && (nId != CANCEL)) then
SilentReadData( szAppKey, "szSqlsvname", DATA_STRING, szSqlsvname, nTemp );
SilentReadData( szAppKey, "szSqluser", DATA_STRING, szSqluser, nTemp );
SilentReadData( szAppKey, "szSqlpassword", DATA_STRING, szSqlpassword, nTemp );
endif;

return nId;
endif;

// ensure general initialization is complete
if (!bSdInit) then
SdInit();
endif;

if (EzDefineDialog( szDlg, "", "",DLG_LoginSQLSV ) = DLG_ERR) then
return -1;
endif;

// 在用户选择标准按钮前进行循环
bDone = FALSE;

while (!bDone)

nId = WaitOnDialog( szDlg );//显示对话框
hwndControl = GetDlgItem (hwndDlg, SD_EDIT_SQLSV_NAME);
SetFocus (hwndControl);

switch(nId)
case DLG_INIT:
CtrlSetText( szDlg, SD_EDIT_SQLSV_NAME, szSqlsvname );
CtrlSetText( szDlg, SD_EDIT_SQLSV_USER, szSqluser );
CtrlSetText( szDlg, SD_EDIT_SQLSV_PASSWORD, szSqlpassword );

hwndDlg = CmdGetHwndDlg( szDlg );
SdGeneralInit( szDlg, hwndDlg, STYLE_NORMAL, szSdProduct );

//This function sets the caption for old style dialogs or
//sets the text in the top banner area of win2k style dialogs
SdSetDlgTitle(szDlg, hwndDlg, szTitle);
case SD_EDIT_SQLSV_NAME:
nMessage = CtrlGetSubCommand( szDlg );
if( nMessage = EDITBOX_CHANGE ) then
CtrlGetText( szDlg, SD_EDIT_SQLSV_NAME, szSqlsvname );
endif;
case SD_EDIT_SQLSV_USER:
nMessage = CtrlGetSubCommand( szDlg );
if( nMessage = EDITBOX_CHANGE ) then
CtrlGetText( szDlg, SD_EDIT_SQLSV_USER, szSqluser );
endif;
case SD_EDIT_SQLSV_PASSWORD:
nMessage = CtrlGetSubCommand( szDlg );
if( nMessage = EDITBOX_CHANGE ) then
CtrlGetText( szDlg, SD_EDIT_SQLSV_PASSWORD, szSqlpassword );
endif;
case OK:
nId = NEXT;
bDone = TRUE;

case BACK:
nId = BACK;
bDone = TRUE;

case DLG_ERR:
SdError( -1, "SdWelcome" );
nId = -1;
bDone = TRUE;

case DLG_CLOSE:
SdCloseDlg( hwndDlg, nId, bDone );

default:
// check standard handling
if (SdIsStdButton( nId ) && SdDoStdButton( nId )) then
bDone = TRUE;
endif;
endswitch;

endwhile;

EndDialog( szDlg );
ReleaseDialog( szDlg );

SdUnInit( );

// record data produced by this dialog
SdMakeName( szAppKey, szDlg, szTitle, nLoginSQL );
SilentWriteData( szAppKey, "szSqlsvname", DATA_STRING, szSqlsvname, 0 );
SilentWriteData( szAppKey, "szSqluser", DATA_STRING, szSqluser, 0 );
SilentWriteData( szAppKey, "szSqlpassword", DATA_STRING, szSqlpassword, 0 );
SilentWriteData( szAppKey, "Result", DATA_NUMBER, "", nId );

return nId;

end;

function exeSQLfile( szsqlfilename )
STRING szCmdLine;
NUMBER nTemp;
begin
szCmdLine = SUPPORTDIR ^"osql.exe";
if (LaunchAppAndWait(SUPPORTDIR ^"osql.exe", szsqlfilename,WAIT) < 0) then
MessageBox ("不能运行SQL安装文件.",SEVERE);
endif;

end;

function modifdbdir()
STRING szinstallfile;
NUMBER nvResult,nvLineNumber;
STRING szwindir,svReturnLine;
NUMBER sn,nStartPos;
STRING sz1,sz2,sznewdir;
NUMBER nTemp;
begin
szinstallfile = TARGETDIR ^"install/createdb.sql";
//替换 DB文件的建立路径
while (nvResult != END_OF_FILE)
nvResult = FileGrep (szinstallfile, "D:/cycdata/", svReturnLine,nvLineNumber, RESTART);
//FileDeleteLine(szodbcregfile, nvLineNumber, nvLineNumber);
sn=StrLength (svReturnLine);
nStartPos = StrFind(svReturnLine,"D:/cycdata/");
StrSub (sz1, svReturnLine, 0, nStartPos);
StrSub (sz2, svReturnLine, nStartPos+11, sn-nStartPos-11);
sznewdir=sz1+TARGETDIR ^sz2;
FileInsertLine(szinstallfile, sznewdir,nvLineNumber, REPLACE);
sz1="";
sz2="";
sznewdir="";
endwhile;

end;

//
//
// FUNCTION: OnFileReadOnly
//
// EVENT: FileReadOnly event is sent during file transfer when a read-only
// file is needs to be overwritten or removed.
//
// ARGUMENTS: File - full path of file that is marked as read-only.
//
// RETURN: ERR_YES - the file should be overwritten or removed.
// ERR_NO - the file should not be modified.
//
///
function OnFileReadOnly(File)
begin
return SdExceptions(READONLY, File);
end;

//
//
// FUNCTION: OnFileReadOnly
//
// EVENT: FileReadOnly event is sent during file transfer when a read-only
// file is needs to be overwritten or removed.
//
// ARGUMENTS: File - full path of file that is marked as read-only.
//
// RETURN: ERR_YES - the file should be overwritten or removed.
// ERR_NO - the file should not be modified.
//


 
---------------------------------------------------

使用InstallShield制作ASP安装程序(5)
   浏览选项:     

//                                                                            
//  IIIIIII SSSSSS                                                            
//    II    SS                          InstallShield (R)                    
//    II    SSSSSS      (c) 1996-1999, InstallShield Software Corporation    
//    II        SS      (c) 1990-1996, InstallShield Corporation              
//  IIIIIII SSSSSS                    All Rights Reserved.                  
//                                                                            
//                                                                            
//  This code is generated as a starting setup template.  You should  
//  modify it to provide all necessary steps for your setup.
//                                                                            
//                                                                            
//    File Name:  Setup.rul                                                  
//                                                                            
//  Description:  InstallShield script                                        
//                                                                            
//    Comments:  This template script performs a basic setup. With minor          
//                modifications, this template can be adapted to create      
//                new, customized setups.
//



// Include header files
    
    #include "ifx.h" //DO NOT REMOVE
    
// string defines

installation declarations ///

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


    // your DLL function prototypes


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


    // your script function prototypes

    // 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, ComponentTransferData is called to perform file
//              transfer.
//                                                                          
///
function OnFirstUIBefore()
    NUMBER  nResult,nSetupType;
    STRING  szTitle, szMsg;
    STRING  szLicenseFile, szQuestion;
    STRING  svName, svCompany, svSerial;
    STRING  szDir;
    STRING  szfolder;
    STRING  szComponents, szTargetdir;
    NUMBER  nLevel;

begin

  
    //To Do: if you want to enable background, window title, and caption bar title                                                                    
    // SetTitle( @TITLE_MAIN, 24, WHITE );                                        
    // SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );                   
    // Enable( FULLWINDOWMODE );   
    // Enable( BACKGROUND );   
    // SetColor(BACKGROUND,RGB (0, 128, 128));   
  
    //默认值设定
    TARGETDIR = "C:/Inetpub/wwwroot/WebApp";
    szDir = TARGETDIR;
    SHELL_OBJECT_FOLDER = @FOLDER_NAME;  
    svName    = "Daniel";
    svCompany = "N/A";
    svSerial = "111-1111111";

    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_SdRegisterUserEx:
    szMsg  = "";
    szTitle = "";
    nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial );
    //验证序列号
    if (svSerial !="111-1111111") then
    MessageBox ("InValid Serial!",WARNING);
    goto Dlg_SdRegisterUserEx;
    endif;
    if (nResult = BACK) goto Dlg_SdLicense;

    Dlg_SdAskDestPath:
    szTitle = "";
    szMsg  = "";
    nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
    TARGETDIR = szDir;
    if (nResult = BACK) goto Dlg_SdRegisterUserEx;

    Dlg_SdComponentTree:
    if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SdAskDestPath;
    szTitle    = "";
    szMsg      = "";
    szTargetdir = TARGETDIR;
    szComponents = "";
    nLevel = 2;
    if (nSetupType = CUSTOM) then
nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel);
if (nResult = BACK) goto Dlg_SdAskDestPath;  
    endif;

    Dlg_SdSelectFolder:
    szfolder = SHELL_OBJECT_FOLDER;
    szTitle    = "";
    szMsg      = "";
    nResult    = SdSelectFolder( szTitle, szMsg, szfolder );
    SHELL_OBJECT_FOLDER = szfolder;
    if (nResult = BACK) goto Dlg_SdComponentTree;
    
  
    // setup default status
    SetStatusWindow(0, "");
    Enable(STATUSEX);
    StatusUpdate(ON, 100);

    return 0;

end;


  ----------------------------------------------------

使用InstallShield制作ASP安装程序(6)
   浏览选项:     
//
//
//  FUNCTION:  OnFirstUIAfter
//
//  EVENT:      FirstUIAfter event is sent after file transfer, when installation
//              is run for the first time on given machine. In this event handler
//              installation usually displays UI that will inform end user that
//              installation has been completed successfully.
//
///

function OnFirstUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szCmdLine;
NUMBER bOpt1, bOpt2;
begin
    szCmdLine = TARGETDIR ^"mkwebdir.vbs "+"-c localhost -w 1 -v WebApp," + TARGETDIR ;
    if (LaunchAppAndWait("WScript.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("不能建立WEB 虚拟目录.",SEVERE);
    endif;
    Disable(STATUSEX);
    bOpt1 = FALSE;
    bOpt2 = FALSE;
    szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);
    szMsg2 = "";
    szOption1 = "";
    szOption2 = "";
    szTitle    = "";
    SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
    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,
//              ComponentTransferData is called to perform file transfer.
//
///
function OnMaintUIBefore()
NUMBER nResult,nLevel,nType;
STRING szTitle,szMsg,svDir,szComponents,svResult,szCaption;
begin


//To Do:  if you want to enable background, window title, and caption bar title  
// SetTitle( @TITLE_MAIN, 24, WHITE );
//    SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );  
// SetColor(BACKGROUND,RGB (0, 128, 128));
// Enable( FULLWINDOWMODE );
//    Enable( BACKGROUND );

nType = MODIFY;

Dlg_Start:
Disable(BACKBUTTON);
nResult = SdWelcomeMaint(szTitle, szMsg, nType);
Enable(BACKBUTTON);

Dlg_SdComponentTree:
if (nResult = MODIFY) then
szTitle = "";
szMsg = "";
svDir = TARGETDIR;
szComponents = "";
nLevel = 2;
nResult = SdComponentTree(szTitle, szMsg, svDir, szComponents, nLevel);
if (nResult = BACK) goto Dlg_Start;
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);

elseif (nResult = REMOVEALL) then
svResult = SdLoadString(IFX_MAINTUI_MSG);
szCaption = SdLoadString(IFX_ONMAINTUI_CAPTION);
nResult = SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult);
if (nResult = IDCANCEL) then
goto Dlg_Start;
elseif(nResult = IDOK) then
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);

//-->Remove all components
ComponentRemoveAll();
endif;
elseif (nResult = REPAIR) then
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);

//-->Reinstall Logged Components
ComponentReinstall();
endif;

end;



///
//
//  FUNCTION:  OnMaintUIAfter
//
//  EVENT:      MaintUIAfter event is sent after file transfer, 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 that will inform
//              end user that maintenance/uninstallation has been completed successfully.
//
///
function OnMaintUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
NUMBER bOpt1, bOpt2;
begin
    Disable(STATUSEX);
    bOpt1 = FALSE;
    bOpt2 = FALSE;
    szMsg1 = SdLoadString(IFX_SDFINISH_MAINT_MSG1);
    szMsg2 = "";
    szOption1 = "";
    szOption2 = "";
    szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);
    SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
    return 0;
end;

///
//
//  FUNCTION:  OnMoving
//
//  EVENT:      Moving event is sent when file transfer is started as a result of
//              ComponentTransferData call, before any file transfer operations
//              are performed.
//
///
function OnMoving()
STRING szAppPath;
begin
  // Set LOGO Compliance Application Path
  // TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder
    szAppPath = TARGETDIR;
    RegDBSetItem(REGDB_APPPATH, szAppPath);
    RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);

end;

// --- include script file section ---

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值