InstallShield学习笔记

1、当我们用项目向导生成的新项目时,InstallShield只为我们生成两个事件,分别是OnFirstUIBefore和OnMoving,它们的意义是,
OnFirstUIBefore:在应用程序第一次安装时为了搜集用户信息而弹出的对话框之前,应用程序所响应的事件。
OnMoving:该事件在当所选择的安装组件正在安装或反安装时响应。

2、在OnFirstUiBefore()中添加以下代码,检测.NET Framework2.0及SqlServer2000

//---------------------------------------------------------------- SdShowMsg ( "安装程序正在检测系统必备组件...... ",TRUE); Delay(2); SdShowMsg ("",FALSE); //------------------------------------------------------- SetDotNet: //判断是否安装了.netframework RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); if ( RegDBKeyExist ("SOFTWARE//Microsoft//.NETFramework//policy//v2.0" ) < 0) then SprintfBox(MB_OK,".NET安装","尚未安装.net framework 2.0 !/n请点击“确定”以继续安装!"); if( LaunchAppAndWait( SUPPORTDIR ^ "dotnetfx.exe" , "/q:a/l" ,WAIT) < 0) then SprintfBox(MB_OK,".NET安装","安装.net框架时发生意外,请重新安装!"); else SprintfBox(MB_OK,".NET安装",".NET FrameWork 2.0已安装!"); endif; endif; //---------------------------------------------------------------------- SetSqlServer: //判断是否安装了SQL Server RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); if ( RegDBSetKeyValueEx ("SOFTWARE//Microsoft//Microsoft SQL Server//80//MSSQLLicenseInfo//MSSQL8.00//DisplayName","DisplayName",REGDB_STRING,"SQL Server 2000",-1 ) < 0) then SprintfBox(MB_OK,"SQL Server 2000 安装","尚未安装SQL Server 2000 !/n请点击“确定”以继续安装!"); if( LaunchAppAndWait( SUPPORTDIR ^ "SQL 2000 Enterprise//AUTORUN.EXE.exe" , "/q:a/l" ,WAIT) < 0) then SprintfBox(MB_OK,"SQL Server 2000 安装","安装SQL Server 2000 时发生意外,请重新安装!"); else SprintfBox(MB_OK,"SQL Server 2000 安装","SQL Server 2000 已安装!"); endif; endif;

其中:dotnetfx.exe放在   Behavior and Logic->Support Files->Language Independent下

在Behavior and Logic->Support Files->Advanced Files->Disk1下右击Insert Forder 将SqlServer 2000的安装盘(目录为SQL 2000 Enterprise)加进来。

3、在OnFirstUiBefore()中添加以下代码,设置背景图片

//----------------------------------------------------------------------- //设置背景图片 SetTitle("欢迎您使用银河卡电子产品", 24, WHITE); SetTitle( "安装“网上阅卷系统”",0,BACKGROUNDCAPTION); Enable(FULLWINDOWMODE); Enable(BACKGROUND ); // PlaceBitmap (SUPPORTDIR^"BackGround.bmp",0,0,0,UPPER_LEFT); //左上角显示图片 // PlaceBitmap (SUPPORTDIR^"BackGround.bmp",0,0,0,FULLSCREENSIZE); //全屏显示图片 //PlaceWindow ( BILLBOARD , 200 , 40 , UPPER_LEFT ); //平铺logo //SetDisplayEffect(EFF_FADE);//设置显示效果 // PlaceWindow ( BILLBOARD , 200 , 40 , UPPER_LEFT ); //PlaceWindow(BACKGROUND,10,10,UPPER_LEFT); //背景窗口的位置为左上方开始10,10 SetColor(BACKGROUND,RGB (0, 128, 128));

其中图片加在 Behavior and Logic ->Support Files/Billboards->Billboards->Language Independent下(图片必须是bmp文件,而且是16位的图片,命名为Bbrdn.bmp,其中n为1,2,3……等。)

在安装进度的时候会每2秒钟更换一次图片。

4、修改对话框左侧,和上面的logo图片(在上面代码的下面即可)

//---------------------------------------------------------------- szBmpPath=SUPPORTDIR+"//left.bmp;1;0,0,0"; //图片有白色的背景,所以设置白色为透明色 //SizeWindow (METAFILE,50, 50); DialogSetInfo (DLG_INFO_ALTIMAGE, szBmpPath,TRUE); // 设置左边的logo图片

注意:szBmpPath需要定义

4、加入快捷方式(包括了添加卸载功能)

下面的代码在OnFirstUIAfter()中写入

//------------------------------------------------------- // 在桌面上添加快捷方式 AddFolderIcon(FOLDER_DESKTOP,"网上阅卷系统首页","http://192.168.1.23:8080/Default.aspx",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE); //添加程序快捷方式 AddFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装","网上阅卷系统首页","http://192.168.1.23:8080/Default.aspx",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE); //添加卸载快捷方式 AddFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装","卸载","/""+PROGRAMFILES+"/InstallShield Installation Information//{96C6BC6D-1EAA-43C2-9A2C-CB1242590FD7}//Setup.exe /"",TARGETDIR,TARGETDIR+"//TempIco//011.ico",0,"",REPLACE); // <PROGRAMFILES>/InstallShield Installation Information/{96C6BC6D-1EAA-43C2-9A2C-CB1242590FD7}/Setup.exe // 其中 // {611b4a59-fae0-443b-acbb-8cb1ce57fada} // 这个值是这样取得的 // Project-》Setting-》General-》Project对应的那项 //---------------------------------------------------------------------------------------------------------------

在function OnMaintUIBefore()中插入以下代码,,第二次安装就是卸载  

function OnMaintUIBefore() number nResult, nType, nMediaFlags; string szTitle, szMsg, szIgnore; //自定义 STRING svResult,szCaption; begin //---------------------------------------------------------------- //此处为第二次是卸载 svResult = SdLoadString(IFX_MAINTUI_MSG); szCaption = SdLoadString(IFX_ONMAINTUI_CAPTION); nResult = SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult); if (nResult = IDCANCEL) then exit; elseif(nResult = IDOK) then // setup default status SetStatusWindow(0, ""); Enable(STATUSEX); StatusUpdate(ON, 100); //-->Remove all components ComponentRemoveAll(); endif; DeleteDir(TARGETDIR,ALLCONTENTS); DeleteDir(TARGETDIR,ONLYDIR); return 0; //------------------------------------------------------------

原话:

安装的时候生成一个卸载的快捷方式  
   
  快捷方式的链接这样写  
  <PROGRAMFILES>/InstallShield   Installation   Information/{611b4a59-fae0-443b-acbb-8cb1ce57fada}/Setup.exe  
  其中  
  {611b4a59-fae0-443b-acbb-8cb1ce57fada}  
  这个值是这样取得的  
  Project-》Setting-》General-》Project对应的那项  
  脚本中加入这个代码,第二次安装就是卸载 

  STRING   svResult,szCaption;  

svResult = SdLoadString(IFX_MAINTUI_MSG); szCaption = SdLoadString(IFX_ONMAINTUI_CAPTION); nResult = SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult); if (nResult = IDCANCEL) then exit; elseif(nResult = IDOK) then // setup default status SetStatusWindow(0, ""); Enable(STATUSEX); StatusUpdate(ON, 100); //-->Remove all components ComponentRemoveAll(); endif; DeleteDir(TARGETDIR,ALLCONTENTS); DeleteDir(TARGETDIR,ONLYDIR); return 0; end;

 

5、删除快捷方式

在function OnUninstall()中加入以下代码 ,删除刚刚添加的快捷方式

//------------------------------------------------------- // 在桌面上删除快捷方式 DeleteFolderIcon (FOLDER_DESKTOP, TARGETDIR+"//TempIco//021.ico"); //删除程序中的快捷方式 DeleteFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装",TARGETDIR+"//TempIco//011.ico");

6、检测是否安装了IIS

在Setup.Rul下的第一行(#include "ifx.h"   )下面添加以下代码

//----------------------------------------------------------------------- prototype CheckIIS(); //检测是否安装了iis //-------------------------------------------------------- //检测是否安装了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; //-----------------------------------------------------------

在 OnFirstUIBefore() (刚刚添加的以下代码的)

//---------------------------------------------------------------- SdShowMsg ( "安装程序正在检测系统必备组件...... ",TRUE); Delay(2); SdShowMsg ("",FALSE);

它的下面添加判断IIS是否安装的代码:

SetIIS: //安装iis //szProgram = "rundll32.exe"; //szCmdLine = "setupapi.dll,InstallHinfSection Modem1 132 " + WINDIR + "driver139//oxser.inf"; if CheckIIS() then goto SetDotNet; else SprintfBox(MB_OK,"IIS安装","您还未安装IIS,请安装!"); if(LaunchAppAndWait("rundll32.exe", "shell32.dll,Control_RunDLL appwiz.cpl,,2", WAIT)<0)then SprintfBox(MB_OK,"IIS安装","IIS安装时发生意外,请重新安装!"); else goto SetIIS; endif; endif; //---------------------------------------------------------------------------

7、获取IP地址,我采用的是通过ipconfig来获得。

将以下代码写在OnFirstUIBefore中

添加变量声明:

string svLine,svSubStr,szIp;//自定义 number nvFileHandle,nvIp;

//--------------------------------------------------------------------- WriteIp: //写获取ip地址文件 OpenFileMode(FILE_MODE_APPEND); if (FindFile(SUPPORTDIR,"ipconfig.bat", svResult) < 0) then //没有,需要create一个 CreateFile(nvFileHandle,SUPPORTDIR,"ipconfig.bat"); else OpenFile ( nvFileHandle ,SUPPORTDIR,"ipconfig.bat"); //LaunchAppAndWait("","net stop w3svc"+"/S",WAIT); endif; WriteLine( nvFileHandle,"ipconfig /all >> /""+SUPPORTDIR+"/ipconfig.txt/""); CloseFile(nvFileHandle); LaunchAppAndWait("",SUPPORTDIR^"ipconfig.bat",WAIT); //---------------------------------------------------------------------------------- //读取ip地址 if (FindFile( SUPPORTDIR,"ipconfig.txt", svResult) < 0) then //没有,需要create一个 goto WriteIp; else OpenFile ( nvFileHandle ,SUPPORTDIR,"ipconfig.txt"); endif; ab: if(GetLine( nvFileHandle,svLine)<0) then CloseFile(nvFileHandle); else nvIp=StrFind (svLine,"IP Address"); if(nvIp>-1)then StrSub (svSubStr, svLine,nvIp+StrLength("IP Address. . . . . . . . . . . . : "), StrLength (svLine)-nvIp+StrLength("IP Address. . . . . . . . . . . . : ")); szIp=svSubStr; else goto ab; endif; endif;

正将原来的创建快捷方式的代码修改如下:

放在OnFirstUIBefore中的倒数第3行即SetStatusExStaticText的上一行即可

//--------------------------------------------------------------------------------- // 在桌面上添加快捷方式 AddFolderIcon(FOLDER_DESKTOP,"网上阅卷系统首页","/"http://"+szIp+":8080/Default.aspx/"",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE); //添加程序快捷方式 AddFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装","网上阅卷系统首页","/"http://"+szIp+":8080/Default.aspx/"",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE); //添加卸载快捷方式 AddFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装","卸载","/""+PROGRAMFILES+"/InstallShield Installation Information//{96C6BC6D-1EAA-43C2-9A2C-CB1242590FD7}//Setup.exe /"",TARGETDIR,TARGETDIR+"//TempIco//011.ico",0,"",REPLACE);

8、修改安装时选择安装类型的提示文字信息

Installation Designer->General Information->String Tables

找到 Value为安装类型的那一行。下面的就是选择安装类型这个页面的相应的文本,改成你想要的就可以了。

 

你可能感兴趣的:(InstallShield学习笔记)