杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2389|回复: 0

InstallShield 学习笔记

[复制链接]
发表于 2018-5-24 20:24:22 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  1. //----------------------------------------------------------------     
  2. SdShowMsg   ( "安装程序正在检测系统必备组件...... ",TRUE);   
  3. Delay(2);      
  4. SdShowMsg   ("",FALSE);   
  5. //-------------------------------------------------------  
  6. SetDotNet:  
  7. //判断是否安装了.netframework  
  8. RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );  
  9. if ( RegDBKeyExist ("SOFTWARE//Microsoft//.NETFramework//policy//v2.0" ) < 0) then  
  10. SprintfBox(MB_OK,".NET安装","尚未安装.net framework 2.0 !/n请点击“确定”以继续安装!");         
  11. if( LaunchAppAndWait( SUPPORTDIR ^ "dotnetfx.exe" , "/q:a/l" ,WAIT) < 0) then   
  12.           SprintfBox(MB_OK,".NET安装","安装.net框架时发生意外,请重新安装!");  
  13. else   
  14.     SprintfBox(MB_OK,".NET安装",".NET FrameWork 2.0已安装!");  
  15.     endif;  
  16. endif;              
  17. //----------------------------------------------------------------------  
  18. SetSqlServer:  
  19. //判断是否安装了SQL Server        
  20. RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );  
  21. if ( RegDBSetKeyValueEx ("SOFTWARE//Microsoft//Microsoft SQL Server//80//MSSQLLicenseInfo//MSSQL8.00//DisplayName","DisplayName",REGDB_STRING,"SQL Server 2000",-1 ) < 0) then  
  22. SprintfBox(MB_OK,"SQL Server 2000 安装","尚未安装SQL Server 2000 !/n请点击“确定”以继续安装!");         
  23. if( LaunchAppAndWait( SUPPORTDIR ^ "SQL 2000 Enterprise//AUTORUN.EXE.exe" , "/q:a/l" ,WAIT) < 0) then   
  24.           SprintfBox(MB_OK,"SQL Server 2000 安装","安装SQL Server 2000 时发生意外,请重新安装!");  
  25. else   
  26.      SprintfBox(MB_OK,"SQL Server 2000 安装","SQL Server 2000 已安装!");  
  27.      endif;  
  28. 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()中添加以下代码,设置背景图片

  1. //-----------------------------------------------------------------------  
  2. //设置背景图片  
  3.       SetTitle("欢迎您使用银河卡电子产品",   24,   WHITE);                                                                                    
  4.           SetTitle( "安装“网上阅卷系统”",0,BACKGROUNDCAPTION);                                             
  5.           Enable(FULLWINDOWMODE);           
  6.           Enable(BACKGROUND );         
  7.          // PlaceBitmap   (SUPPORTDIR^"BackGround.bmp",0,0,0,UPPER_LEFT);  //左上角显示图片  
  8.          // PlaceBitmap   (SUPPORTDIR^"BackGround.bmp",0,0,0,FULLSCREENSIZE);   //全屏显示图片  
  9.          //PlaceWindow ( BILLBOARD , 200 , 40 , UPPER_LEFT ); //平铺logo   
  10.          //SetDisplayEffect(EFF_FADE);//设置显示效果     
  11.          // PlaceWindow   (   BILLBOARD   ,   200   ,   40   ,   UPPER_LEFT   );   
  12.          //PlaceWindow(BACKGROUND,10,10,UPPER_LEFT); //背景窗口的位置为左上方开始10,10   
  13.           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图片(在上面代码的下面即可)

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

注意:szBmpPath需要定义

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

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

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

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

  1. function OnMaintUIBefore()  
  2.     number  nResult, nType, nMediaFlags;  
  3.     string  szTitle, szMsg, szIgnore;   
  4.     //自定义   
  5.     STRING   svResult,szCaption;     
  6. begin  
  7. //----------------------------------------------------------------      
  8. //此处为第二次是卸载  
  9.     svResult   =   SdLoadString(IFX_MAINTUI_MSG);     
  10.     szCaption   =   SdLoadString(IFX_ONMAINTUI_CAPTION);     
  11.     nResult   =   SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult);     
  12.     if   (nResult   =   IDCANCEL)   then     
  13.         exit;     
  14.     elseif(nResult   =   IDOK)   then     
  15.     //   setup   default   status     
  16.         SetStatusWindow(0,   "");     
  17.         Enable(STATUSEX);     
  18.         StatusUpdate(ON,   100);     
  19.         //-->Remove   all   components     
  20.         ComponentRemoveAll();     
  21.     endif;     
  22.     DeleteDir(TARGETDIR,ALLCONTENTS);     
  23.     DeleteDir(TARGETDIR,ONLYDIR);     
  24. return   0;     
  25. //------------------------------------------------------------
复制代码

原话:

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

  STRING   svResult,szCaption;  

  1. svResult   =   SdLoadString(IFX_MAINTUI_MSG);     
  2.          szCaption   =   SdLoadString(IFX_ONMAINTUI_CAPTION);     
  3.        nResult   =   SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult);     
  4.        if   (nResult   =   IDCANCEL)   then     
  5.                exit;     
  6.        elseif(nResult   =   IDOK)   then     
  7.                //   setup   default   status     
  8.                  SetStatusWindow(0,   "");     
  9.                  Enable(STATUSEX);     
  10.                  StatusUpdate(ON,   100);     
  11.      
  12.                //-->Remove   all   components     
  13.          ComponentRemoveAll();     
  14.          endif;     
  15.          DeleteDir(TARGETDIR,ALLCONTENTS);     
  16. DeleteDir(TARGETDIR,ONLYDIR);     
  17.          return   0;     
  18. end;  
复制代码



5、删除快捷方式

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

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

6、检测是否安装了IIS

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

  1. //-----------------------------------------------------------------------  
  2. prototype CheckIIS(); //检测是否安装了iis      
  3. //--------------------------------------------------------   
  4. //检测是否安装了IIS  
  5. function CheckIIS()   
  6.     NUMBER nvType, nvSize;   
  7.     STRING svvalue;   
  8.     begin   
  9.         RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );   
  10.         if (RegDBKeyExist ("System//CurrentControlSet//Services//IISADMIN" ) = 1) then   
  11.                 return (1);   
  12.             else   
  13.                 return (0);   
  14.         endif;  
  15.     end;   
  16. //-----------------------------------------------------------  
复制代码

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


  1. //----------------------------------------------------------------     
  2. SdShowMsg   ( "安装程序正在检测系统必备组件...... ",TRUE);   
  3. Delay(2);      
  4. SdShowMsg   ("",FALSE);   
复制代码

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

  1. SetIIS:  
  2. //安装iis   
  3. //szProgram = "rundll32.exe";   
  4. //szCmdLine = "setupapi.dll,InstallHinfSection Modem1 132 " + WINDIR + "driver139//oxser.inf";  
  5. if CheckIIS()   then      
  6.     goto SetDotNet;  
  7. else      
  8.     SprintfBox(MB_OK,"IIS安装","您还未安装IIS,请安装!");      
  9.     if(LaunchAppAndWait("rundll32.exe", "shell32.dll,Control_RunDLL appwiz.cpl,,2", WAIT)<0)then  
  10.         SprintfBox(MB_OK,"IIS安装","IIS安装时发生意外,请重新安装!");   
  11.         else  
  12.         goto SetIIS;  
  13.     endif;   
  14. endif;  
  15. //---------------------------------------------------------------------------  
复制代码

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

将以下代码写在OnFirstUIBefore中

添加变量声明:

  1. string svLine,svSubStr,szIp;//自定义      
  2. number nvFileHandle,nvIp;  
  3. [c-sharp] view plain copy
  4. //---------------------------------------------------------------------  
  5. WriteIp:  
  6. //写获取ip地址文件  
  7. OpenFileMode(FILE_MODE_APPEND);   
  8. if (FindFile(SUPPORTDIR,"ipconfig.bat", svResult) < 0) then //没有,需要create一个   
  9.     CreateFile(nvFileHandle,SUPPORTDIR,"ipconfig.bat");   
  10. else   
  11.     OpenFile ( nvFileHandle ,SUPPORTDIR,"ipconfig.bat");     
  12.     //LaunchAppAndWait("","net stop w3svc"+"/S",WAIT);  
  13. endif;   
  14. WriteLine( nvFileHandle,"ipconfig /all >> /""+SUPPORTDIR+"/ipconfig.txt/"");   
  15. CloseFile(nvFileHandle);   
  16.   LaunchAppAndWait("",SUPPORTDIR^"ipconfig.bat",WAIT);   
  17. //----------------------------------------------------------------------------------  
  18. //读取ip地址  
  19. if (FindFile( SUPPORTDIR,"ipconfig.txt", svResult) < 0) then //没有,需要create一个   
  20.    goto WriteIp;  
  21. else   
  22.     OpenFile ( nvFileHandle ,SUPPORTDIR,"ipconfig.txt");     
  23. endif;   
  24. ab:  
  25. if(GetLine( nvFileHandle,svLine)<0) then   
  26.     CloseFile(nvFileHandle);  
  27.     else   
  28.         nvIp=StrFind (svLine,"IP Address");  
  29.          if(nvIp>-1)then   
  30.            StrSub (svSubStr, svLine,nvIp+StrLength("IP Address. . . . . . . . . . . . : "), StrLength (svLine)-nvIp+StrLength("IP Address. . . . . . . . . . . . : "));   
  31.            szIp=svSubStr;  
  32.         else  
  33.              goto ab;   
  34.          endif;   
  35. endif;  
复制代码

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

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

  1.     //---------------------------------------------------------------------------------  
  2.     // 在桌面上添加快捷方式   
  3. AddFolderIcon(FOLDER_DESKTOP,"网上阅卷系统首页","/"http://"+szIp+":8080/Default.aspx/"",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE);     
  4.    //添加程序快捷方式  
  5.    AddFolderIcon(FOLDER_PROGRAMS^"网上阅卷系统GF安装","网上阅卷系统首页","/"http://"+szIp+":8080/Default.aspx/"",TARGETDIR,TARGETDIR+"//TempIco//021.ico",0,"",REPLACE);     
  6.    //添加卸载快捷方式  
  7. 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为安装类型的那一行。下面的就是选择安装类型这个页面的相应的文本,改成你想要的就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-14 16:22 , Processed in 0.117632 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表