IS

 


////////////////////////////////////////////////////////////////////////////////
//                                                                           
//  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
//   STRING  nvPathValue,szMsg;

 //  NUMBER  nvType, nrSize;   
 
   #define TITLE "清软英泰PDM安装"

   
   #include "ifx.h" //DO NOT REMOVE
                                                 
  prototype INT lfsofm43.DecryptStr( STRING, BYREF STRING );   // 外部 dll
                                                  
////////////////////// string defines ////////////////////////////

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

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


    // your DLL function prototypes


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


    // your script function prototypes

    // your global variables
      prototype Config();            //定制允许安装的模块
      prototype SetupDir();          //设置三维软件的安装路径
     
      STRING  ugDes, SolidworksDes, solidedgeDes,proeDes,autocadDes;                                      
//////////////////////////////////////////////////////////////////////////////
//                                                                          
//  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  szFile;
    STRING  szTargetPath;
    STRING  szDir;
    STRING  szfolder;
    STRING  szComponents, szTargetdir;
    NUMBER  nLevel;
    LIST    listStartCopy;
    LIST    list;
    NUMBER  nvSize;
    NUMBER  nDx,nDy;
    STRING  svPicName;  
    STRING szTemp;  //临时字符串
    BOOL  nvCheckClient, nvCheckCatch, nvCheckCode,nvCheckGenerator,nvCheckConfig;  //标志客户端、批量提取、编码是否被选择
   
    BOOL  nvCheckProe, nvCheckSolidworks, nvCheckSolidedge,nvCheckUg,nvCheckOffice,nvCheckAutocad;  //标志三维软件是否被选择
    STRING szKey,szName,envValue;    //注册表项
    NUMBER nrType, nPos;                  
    STRING SERVER_NAME;
    STRING svResult;
    //STRING  component(7);        //分别指向7个组件      
  
   
begin 

     
    //To Do:  if you want to enable background, window title, and caption bar title                                                                    
     //SetTitle( @TITLE_MAIN, 24, WHITE );                                       
     SetFont (FONT_TITLE,STYLE_ITALIC ,"Times New Roman");
     SetTitle( @TITLE_MAIN, 24, WHITE);//WHITE );  @TITLE_MAIN
     SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );                    
     Enable( FULLWINDOWMODE );        
     Enable( BACKGROUND );        
     //SetColor(BACKGROUND,RGB (0, 128, 255)|BK_SMOOTH);       
         
    GetExtents(nDx,nDy);
    SizeWindow(METAFILE,nDx/20,nDy/20);
    PlaceWindow(BILLBOARD,10,10,UPPER_LEFT);
   
    //SetColor ( BACKGROUND , BK_BLUE );
    //GetExtents(nvDx,nvDy);
    SetDisplayEffect (EFF_FADE);
    svPicName = SUPPORTDIR ^ "Setup.bmp"; 
    PlaceBitmap (svPicName, 11,0,0,FULLSCREENSIZE);//FULLSCREENSIZE);BITMAPICON
    Delay(1);      

  
    nSetupType = TYPICAL; 
    //TARGETDIR = PROGRAMFILES ^@AppPath^ "Client";
    TARGETDIR = "C:\\thitsoft";
    szDir = TARGETDIR;
    SHELL_OBJECT_FOLDER = @FOLDER_NAME;
    svName    = "英泰PDM";
    svCompany = "清软英泰软件";
    svSerial = "";
   
     //应姚作勋的要求对以前安装的PDM版本首先进行卸载,先给出提示吧
    //如果是本版本安装的,则会直接调用OnMaintUIBefore,否则转到这里
    RegDBSetDefaultRoot(HKEY_CURRENT_USER);
    //如果在注册表中找到Software\\PDMS\\3.8 或者Software\\PDMS\\AllCatch键,则说明有以前版本的没有卸载
  /*  if ( (RegDBKeyExist ("Software\\PDMS\\3.8") = 1)  || (RegDBKeyExist ("Software\\PDMS\\AllCatch") = 1) ) then
     if ( AskYesNo( "检测到以前版本的PDM软件,请先卸载再进行安装", YES) = YES) then
      abort; 
     endif;
    endif;
  */
   
    //首先判断,只有系统管理员级用户才可以安装
    if (Is (USER_ADMINISTRATOR, szTemp) != TRUE) then
     MessageBox("只有Windows系统管理员级用户才可以进行安装,请退出安装程序,以系统管理员用户登陆后安装",SEVERE);
  abort;
  endif;
    
    Dlg_Start:
    // beginning of dialogs label

    Dlg_SdWelcome:                                        
    szTitle = "欢迎使用清软英泰产品数据管理系统";//欢迎使用英泰软件
    szMsg   = "软件安装向导将在您的计算机中安装『清软英泰产品数据管理系统』,若要继续请按下一步。建议您在安装系统之前关闭所有的应用程序。";//欢迎,欢迎热烈欢迎
    //svPicName="setup.bmp"; 
    nResult = SdWelcome( szTitle, szMsg );
    //SdBitmap(szTitle,szMsg,svPicName);
    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:
//    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;

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

    //读配置文件setup.ini,使某些组件不可见 
   Config();
    
    Dlg_SdComponentTree:
 //   if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;
    szTitle    = "安装组件选择";
    szMsg      = "请选择要安装的组件";
    szTargetdir = TARGETDIR;
    szComponents = "";
    nLevel = 2;                    
    //将组件是否选择的标志置回去
    nvCheckClient = FALSE;
    nvCheckCatch = FALSE;
    nvCheckCode = FALSE;
    nvCheckProe = FALSE;
    nvCheckUg = FALSE;
    nvCheckSolidworks = FALSE;
    nvCheckSolidedge = FALSE;  
    nvCheckOffice = FALSE;
   nvCheckGenerator = FALSE; 
   nvCheckAutocad = FALSE; 
   nvCheckConfig = FALSE;
   
  nResult = SdFeatureDialog2(szTitle, szMsg, szTargetdir, szComponents);
  if (nResult = BACK) goto Dlg_SdAskDestPath; 
 //记录下来哪些组件要进行安装
 if (FeatureIsItemSelected(MEDIA, "客户端") = 1 ) then
     nvCheckClient = TRUE;
    endif;
    if (FeatureIsItemSelected(MEDIA, "批量提取工具") = 1 ) then
     nvCheckCatch = TRUE;
    endif;
    if ( FeatureIsItemSelected(MEDIA, "消息工具") = 1) then
     nvCheckCode = TRUE; 
    endif; 
    if ( FeatureIsItemSelected(MEDIA, "Proe集成") = 1) then
     nvCheckProe = TRUE; 
    endif; 
    if ( FeatureIsItemSelected(MEDIA, "Ug集成") = 1) then
     nvCheckUg = TRUE; 
    endif; 
    if ( FeatureIsItemSelected(MEDIA, "SolidWorks集成") = 1) then
     nvCheckSolidworks = TRUE; 
    endif; 
    if ( FeatureIsItemSelected(MEDIA, "SolidEdge集成") = 1) then
     nvCheckSolidedge = TRUE; 
    endif; 
   
    if ( FeatureIsItemSelected(MEDIA, "AutoCAD集成") = 1) then
     nvCheckAutocad = TRUE; 
    endif;  
           
    if ( FeatureIsItemSelected(MEDIA, "Office集成") = 1) then
     nvCheckOffice = TRUE; 
    endif;  
    //wyy 2004-1-17增加编码生成器
    if ( FeatureIsItemSelected(MEDIA, "编码管理工具") = 1) then
     nvCheckGenerator = TRUE; 
    endif; 
   
    //增加建模工具
    if ( FeatureIsItemSelected(MEDIA, "建模工具") =1) then
     nvCheckConfig =TRUE;
    endif;
         
    //如果没有选择任何组件,则给出提示,重新选择
    if (!nvCheckClient && !nvCheckCatch && !nvCheckCode && !nvCheckProe && !nvCheckUg && !nvCheckSolidworks && !nvCheckSolidedge && !nvCheckAutocad && !nvCheckOffice  && !nvCheckGenerator && !nvCheckConfig) then
         MessageBox("请至少选择一个组件进行安装", WARNING);
         goto Dlg_SdComponentTree;
    endif;    
   
    //把以下设置路径的操作,放在一个函数里进行
    if (SetupDir() = FALSE) then  
     goto Dlg_SdComponentTree;
    endif;
 
      
    Dlg_SdStartCopy:
    szTitle = "";
    szMsg   = "";
     
    listStartCopy = ListCreate( STRINGLIST );          
    ListAddString(listStartCopy, "安装程序将安装以下组件:\r\n"  , AFTER );
    if ( nvCheckClient) then
     ListAddString(listStartCopy, "     客户端\r\n", AFTER );
    endif;
    if ( nvCheckCatch ) then
     ListAddString(listStartCopy, "     批量提取工具\r\n", AFTER );
    endif;
    if ( nvCheckCode ) then
     ListAddString(listStartCopy, "     消息工具\r\n", AFTER );
    endif;
    if ( nvCheckProe ) then
     ListAddString(listStartCopy, "     Proe集成\r\n", AFTER );
    endif;
    if ( nvCheckUg ) then
     ListAddString(listStartCopy, "     Ug集成\r\n", AFTER );
    endif;
    if ( nvCheckSolidworks ) then
     ListAddString(listStartCopy, "     SolidWorks集成\r\n", AFTER );
    endif;
    if ( nvCheckSolidedge ) then
     ListAddString(listStartCopy, "     SolidEdge集成\r\n", AFTER );
    endif; 
     if ( nvCheckAutocad ) then
     ListAddString(listStartCopy, "     AutoCAD集成\r\n", AFTER );
    endif;
    if ( nvCheckOffice ) then
     ListAddString(listStartCopy, "     Office集成\r\n", AFTER );
    endif;
    if ( nvCheckGenerator ) then
     ListAddString(listStartCopy, "     编码管理工具\r\n", AFTER );
    endif;
    if ( nvCheckConfig ) then
     ListAddString(listStartCopy, "     建模工具\r\n", AFTER);
    endif;
   
  ListAddString(listStartCopy, "\r\n安装路径:\r\n    " + TARGETDIR + "\ 目录下", AFTER );
    nResult = SdStartCopy( szTitle, szMsg, listStartCopy );   
      
    ListDestroy(listStartCopy);
    if (nResult = BACK) goto Dlg_SdComponentTree;

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

end;

//////////////////////////////////////////////////////////////////////////////
//
//  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;
STRING svResult;       
NUMBER bOpt1, bOpt2;       
NUMBER nType, nvType,nrSize,nVersion;
STRING nvPathValue,szTemp; 
begin
    Disable(STATUSEX);                      
     //viewgwd控件现在已经打在安装包里了,不需要另外安装了
   /* if (SYSINFO.WIN9X.bWin9X) then
     //如果装了client,则运行以下程序
     if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "ViewGwd9x.EXE", svResult) = 0 ) then
      LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\ViewGwd9x.EXE", "",WAIT);
     //否则如果装了catch,运行catch目录下的这个程序 
     elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "ViewGwd9x.EXE", svResult) = 0 ) then
      LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\ViewGwd9x.EXE", "",WAIT);
     endif;
    else
     //同上
     if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "ViewGwdNT.EXE", svResult) = 0 ) then
         LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\ViewGwdNT.EXE", "",WAIT);         
        elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "ViewGwdNT.EXE", svResult) = 0 ) then
         LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\ViewGwdNT.EXE", "",WAIT);         
        endif;
    endif;
    */
    //同上          
                    
  RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE); 
  if ( RegDBKeyExist ("Software\\Microsoft\\.NETFramework\\v3.0") < 0) then 
 
   if ( RegDBKeyExist ("Software\\Microsoft\\Active Setup\\Installed Components\\{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}") < 0) then
   // RegDBGetKeyValueEx ("Software\\Microsoft\\Active Setup\\{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}", "Version", nvType, nvPathValue, nrSize);
         // StrSub (szTemp, nvPathValue, 4, 1 );
        //  StrToNum(nVersion,szTemp);
         // if( nVersion < 5 ) && (nvPathValue != "v2.0.50727")then
         //   if ( AskYesNo("机器检测到.NET FRAMEWORK现有版本低于v2.0.50727,你是否要继续安装现有.NET FRAMEWORK。", YES) = YES) then
              if ( FindFile (TARGETDIR ^ "\\client\\" , "Net Framework.exe", svResult) = 0) then
         LaunchAppAndWait(TARGETDIR ^ "\\client\\Net Framework.exe", "",WAIT);
        endif;  
             //endif;
            //  endif;
  // else
   
  // if ( FindFile (TARGETDIR ^ "\\client\\" , "Net Framework.exe", svResult) = 0) then
   //     LaunchAppAndWait(TARGETDIR ^ "\\client\\Net Framework.exe", "",WAIT);
  // endif; 
   endif; 
   endif;   
  
  if ( FindFile (TARGETDIR ^ "\\client\\" , "sn.exe", svResult) = 0 ) then
    LaunchAppAndWait(TARGETDIR ^ "\\client\\sn.exe", "-Vr DevExpress.Data.v7.2.dll",WAIT);
  endif;                   
  if ( FindFile (TARGETDIR ^ "\\client\\" , "sn.exe", svResult) = 0 ) then
    LaunchAppAndWait(TARGETDIR ^ "\\client\\sn.exe", "-Vr DevExpress.Utils.v7.2.dll",WAIT);
  endif;        
 
  if ( FindFile (WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\","RegAsm.exe",svResult) = 0)   then
   LaunchAppAndWait(WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\RegAsm.exe", TARGETDIR ^ "\\client\\Thit.TiPDM.APP.TiPDMIntegration.dll /tlb:Thit.TiPDM.APP.TiPDMIntegration.tlb /codebase",WAIT); 
  // LaunchAppAndWait(WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\RegAsm.exe", TARGETDIR ^ "\\client\\Thit.TiPDM.APP.TiPDMIntegration.dll" ^ " /tlb Thit.TiPDM.APP.TiPDMIntegration.tlb /codebase",WAIT); 
  endif;
   // if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "Mdac_typ.exe", svResult) = 0 ) then
     //LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\Mdac_typ.exe", "",WAIT);
    //elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "Mdac_typ.exe", svResult) = 0 ) then
     //LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\Mdac_typ.exe", "",WAIT);
    //endif;
    //预留一个接口可以自动调用用户的安装程序,只需将安装程序放在安装盘所在run目录下,安装文件名为setup.exe
    if ( FindFile (SRCDIR ^ "\\support\\otherSetup\\" , "setup.exe", svResult) = 0 ) then
     LaunchAppAndWait(SRCDIR ^ "\\support\\otherSetup\\setup.exe", "",WAIT);
    endif;    
   
   
       RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
   
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiPDMCLT","InstallPath",REGDB_STRING,TARGETDIR,-1);  
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Common","ConfigPath",REGDB_STRING,TARGETDIR ^"\\liveupdate\\config",-1);
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Common","WorkingPath",REGDB_STRING,TARGETDIR^"\\client",-1);
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Windows","InstallPath",REGDB_STRING,WINDIR,-1);
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiLiveUpdate","LiveUpdatePath",REGDB_STRING,TARGETDIR^"\\liveupdate",-1); 
       RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiLiveUpdate","ClientPath",REGDB_STRING,TARGETDIR^"\\client",-1);
    /*
    //其它控件注册      
    if ( FindFile (TARGETDIR ^ "\\otherRegister\\" , "registerList.txt", svResult) = 0 ) then
     //打开参数文件,读取需要注册的控件
     OpenFileMode (FILE_MODE_NORMAL);
   if (OpenFile (nvFileHandle, TARGETDIR ^ "\\otherRegister\\", "registerList.txt") < 0) then
      MessageBox ("打开注册文件失败。", SEVERE);
     // abort;
     endif; 
     while GetLine (nvFileHandle, szLine) = 0   
           MessageBox (szLine, SEVERE);
       regsvr32 
       endif;
   endwhile;
    endif;
    */          
    bOpt1 = FALSE;
    bOpt2 = FALSE;
    szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);
    szMsg2 = "";
    szOption1 = "";
    szOption2 = "";
    szTitle     = "清软英泰PDM安装向导";
    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;      
BOOL   nvCheckSingle,nvCheckNet;       
STRING szTemp;
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); 
  SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION ); 
  nResult = SdWelcomeMaint(szTitle, szMsg, nType);
  Enable(BACKBUTTON);
       
        //Config();
  Dlg_SdComponentTree:
  if (nResult = MODIFY) then
      //修改的时候才进行配置设置
   Config();
   szTitle = "";
   szMsg = "";
   svDir = TARGETDIR;
   szComponents = "";
   nLevel = 2;          
      
   nResult = SdFeatureDialog2(szTitle, szMsg, svDir, szComponents);
   //nResult = SdComponentTree(szTitle, szMsg, svDir, szComponents, nLevel);
   if (nResult = BACK) goto Dlg_Start; 
   
    //把以下设置路径的操作,放在一个函数里进行
      if (SetupDir() = FALSE) then  
       goto Dlg_SdComponentTree;
      endif;
   
   /*//如果选择了批量提取,则
   if (FeatureIsItemSelected(MEDIA, "PDM批量提取工具") = 1) then
        Dlg_CatchSetupType:
     
     nvCheckSingle = TRUE;   
        nResult = AskOptions(EXCLUSIVE, "请选择要安装的批量提取工具的类型", "单机版",nvCheckSingle,"网络版",nvCheckNet);
        if (nResult = BACK) goto Dlg_SdComponentTree;
        //如果选择了了安装网络版,则输入中间服务器名称
        if (nvCheckNet) then 
         Dlg_InputServer:
         
        nResult = AskText ("请输入中间服务器名称", "", szTemp);
         if (nResult = BACK) goto Dlg_CatchSetupType;
         if (szTemp = "") then
          MessageBox("中间服务器名称必须输入,否则安装无法继续", SEVERE); 
          goto Dlg_InputServer;
          else
          //将中间服务器名称写入注册表    
           // RegDBSetDefaultRoot (HKEY_CURRENT_USER);
          // szKey = "software\\PDMS\\AllCatch"; 
          // szName = "AllCatchPdmServer";
          // nrType = REGDB_STRING;
            // RegDBSetKeyValueEx (szKey, szName, nrType, szTemp,-1); 
            FeatureSetTarget(MEDIA, "<SERVER_NAME>", szTemp);    
          endif;     
          else
     FeatureSetTarget(MEDIA, "<SERVER_NAME>", "SingleAllCatch");                                        
          endif;
       endif;
      */
      
   // 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
    FeatureRemoveAll();
   endif;
  elseif (nResult = REPAIR) then
   // setup default status
   SetStatusWindow(0, "");
   Enable(STATUSEX);
   StatusUpdate(ON, 100);
 
   //-->Reinstall Logged Components
   FeatureReinstall();
  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 = "英泰PDM安装向导已完成在 %p 上执行维护操作。";//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;
 
//////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION:   OnMoved
//
//  EVENT:      Moved event is sent when file transfer started by ComponentTransferData call
//              has finished. At this point all file transfer operations are completed
//              except for batch self-registration which is performed immediately after this
//              function returns. During uninstallation this event sent after uninstallation
//              is completed. For that reason you should not modify system state in this
//              event handler.
//
///////////////////////////////////////////////////////////////////////////////
function OnMoved()
STRING srcPath;
//NUMBER  nvFileHandle;
begin
//用于客户端exe和帮助文件的配置传输    

srcPath=SRCDIR ^ "support\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif; 

//增加对系统32下文件的替换
srcPath=SRCDIR ^ "windir\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , WINDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;   
//增加对系统32下文件的替换
srcPath=SRCDIR ^ "windir\\winsysdir\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , WINSYSDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;         
/*
srcPath=SRCDIR ^ "support\\client\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ^ "\\client\\Application\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;     

//用于批量提取exe文件的配置传输
srcPath=SRCDIR ^ "support\\allCatch\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ^ "\\allCatch\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;     

//用于字体的传输
srcPath=SRCDIR ^ "support\\fonts\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ^ "\\avwin\\fonts\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;           

//用于proe的传输
srcPath=SRCDIR ^ "support\\proe\\*.*" ;
if !MAINTENANCE then    
 if (XCopyFile(srcPath , proeDes ^ "\\proepdm\\", COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;

//用于ug的传输
srcPath=SRCDIR ^ "support\\ug\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , ugDes ^ "\\ugmenu\\startup\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;

//用于solidworks的传输
srcPath=SRCDIR ^ "support\\solidworks\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , SolidworksDes ^ "\\solidworkspdm\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;

//用于solidedge的传输
srcPath=SRCDIR ^ "support\\solidedge\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , solidedgeDes ^ "\\solidedgepdm\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;
*/
//其他注册控件文件传输 
srcPath=SRCDIR ^ "support\\otherfiles\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ^ "\\otherFiles\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;             
srcPath=SRCDIR ^ "support\\registerFile\\*.*" ;
if !MAINTENANCE then
 if (XCopyFile(srcPath , TARGETDIR ^ "\\otherFiles\\",COMP_NORMAL|INCLUDE_SUBDIR|SELFREGISTER|SHAREDFILE) < 0) then
  MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
  abort; 
 endif;
endif;             

//if MAINTENANCE then
//    if ExistsDir(TARGETDIR)=EXISTS then
//  if (DeleteDir(TARGETDIR,ALLCONTENTS)<0) then
//   MessageBox ("文件完全卸载失败", SEVERE);
//  endif;
// endif;
//endif; 
//if !MAINTENANCE then   
         
//         OpenFileMode (FILE_MODE_BINARYREADONLY);
         
//         if (OpenFile (nvFileHandle, TARGETDIR ^ "\\Application", "Mdac_typ.exe") < 0) then

//     MessageBox ("请安装最新的微软数据访问组件 Mdac_typ.exe", SEVERE);

//    endif;
    
//            if (CloseFile (nvFileHandle) < 0) then
  
//                   MessageBox ("CloseFile failed.", SEVERE);
     
//            endif;
  
//endif;
end;
 
//////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION:   OnInstallingFile
//
//  EVENT:      Installing File event is sent before a file that is being installed
//
//  ARGUMENTS:  File - full path of file being installed
//
///////////////////////////////////////////////////////////////////////////////

 
//////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION:   OnBegin
//
//  EVENT:      Begin event is always sent as the first event during installation.
//
//////////////////////////////////////////////////////////////////////////////
function OnBegin() 
NUMBER nResult;
NUMBER nType, nSize, nvType, nvSize,nrSize;
STRING svVersionNumber;
STRING nvPathValue;    
string szTemp;                   
NUMBER nVersion; //IE版本号

begin   
    // Setup Interface
   
    //在这里装ID5.5 sp1以上版本不是必须的了,只是给出警告
   SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );
   if (SYSINFO.WINNT.bWinNT4) then
      if SYSINFO.WINNT.nServicePack < 6  then
         if ( AskYesNo( "机器检测到需要安装NT补丁6,如果不进行安装,系统可能不稳定。", YES) = YES) then
      abort; 
       endif;
      endif; 
      RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
      if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Internet Explorer", "Version", nvType, nvPathValue,

                          nrSize) < 0) then     
           if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
             abort  ;  
            endif;
      else   
        //获得版本号第一个字符,判断是否大于6
        StrSub (szTemp, nvPathValue, 0, 1 ); 
        StrToNum (nVersion, szTemp);
         if (nVersion < 6) && (nvPathValue != "5.50.4522.1800") then
           if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
              abort  ;  
             endif;
            //LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
        endif;
  
      endif;
   endif;
   if (SYSINFO.WIN9X.bWin9X) then
      RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
      if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Internet Explorer", "Version", nvType, nvPathValue,

                          nrSize) < 0) then     
          if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
             abort  ;  
           endif;
      else
         //获得版本号第一个字符,判断是否大于6
        StrSub (szTemp, nvPathValue, 0, 1 );  
        StrToNum (nVersion, szTemp);
         if (nVersion < 6) && (nvPathValue != "5.50.4522.1800") then
            if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
             abort  ;  
           endif;
           //LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
        endif;
      endif;
   endif;   
   //RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
   //RegDBDeleteKey("SOFTWARE\\清华同方软件股份公司");  
   //CreateRegistrySet;     
  
     //nResult = VerGetFileVersion(WINSYSDISK ^ "\\Program Files\\Internet Explorer\\ie5setup.exe", svVersionNumber);   
      //if nResult = FILE_NOT_FOUND  then
      //   nResult = VerGetFileVersion(WINSYSDISK ^ "\\Program Files\\Internet Explorer\\IEXPLORE.EXE", svVersionNumber);
      //endif; 
      //if svVersionNumber != "5.50.4522.1800" then
      //     MessageBox ("机器检测到需要安装IE55SP1,如果不进行安装,系统可能不稳定。", INFORMATION);
      //     abort  ;
        //   //LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
      //endif;
     
    // TO DO: you may change default non-UI setting, for example
    //
     //Disable(SELFREGISTERBATCH)
    // SetInstallationInfo with arguments other then default
    //
    // You may also perform your custom initialization steps, check requirements, etc.
end;
 
///////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION:   OnEnd
//
//  EVENT:      End event is the last event. It is not sent if the installation
//              has been aborted. In this case Abort event is sent
//
///////////////////////////////////////////////////////////////////////////////
function OnEnd()

//STRING srcPath;

 

begin
   // RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
   // RegDBDeleteKey("SOFTWARE\\清华同方软件股份公司");  
    //CreateRegistrySet;     
   //RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
  
   //if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\icad.exe", "path", nvType, nvPathValue,

   //                       nrSize) < 0) then   
  //                       
  //     MessageBox ("没有安装MDS,有关PDM与MDS的集成文件请在安装MDS后手动完成!", SEVERE);
                                                 
  // else
  
       //srcPath = TARGETDIR ^ "\\Application\\Mdac_typ.exe" ;  
       
      
       
      
                
      
     //LaunchAppAndWait ( WINDIR ^ "Winhlp32.exe",

      //                  HELPFILE, WAIT);

   //        StrSub (nvPathValue, nvPathValue, 0, 10);
  //    
 //       if (XCopyFile(srcPath , nvPathValue ^ "\\Support\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then 
       
 //        MessageBox ("*.def文件传输失败,请手动拷贝!", SEVERE);
  //abort;
 //    endif;
     
 //    srcPath=SRCDIR ^ "support\\kmcad_mx.con" ; 
         
 //    if (XCopyFile(srcPath ,"c:\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then 
       
 //        MessageBox ("kmcad_mx.con文件传输失败,请手动拷贝!", SEVERE);
  //abort;
 //    endif;   
        
 //    srcPath=SRCDIR ^ "support\\Bom.dll" ; 
           
 //    if (XCopyFile(srcPath ,nvPathValue ^ "\\bin\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then 
       
 //        MessageBox ("kmcad_mx.con文件传输失败,请手动拷贝!", SEVERE);
  //abort;
//     endif;
           
//    endif;
//   endif;
end;  
   
   
//读取配置参数,进行组件安装配置

function Config()
   
   STRING  component(11);        //分别指向10个组件           
   STRING  szTemp,szLine,szConfig;
   NUMBER  nvFileHandle;  //文件句柄   
   NUMBER  i;   
   STRING  szCompany,szCom, szPsd, szDes, szDll; //公司名称,密码, 解密后内容
   NUMBER nSize;     
   STRING  lpBuffer[2048];
begin

    //读配置文件setup.ini,使某些组件不可见 
    //为component数组赋   
     //为component数组赋
    component(0) = "客户端" ;
    component(1) = "批量提取工具" ;
    component(2) = "消息工具" ;
    component(3) = "编码管理工具" ;
    component(4) = "Proe集成" ;
    component(5) = "Ug集成" ;
    component(6) = "SolidWorks集成" ;
    component(7) = "SolidEdge集成" ;
    component(8) = "AutoCAD集成" ;   
    component(9) = "Office集成" ;
    component(10) = "建模工具";
  
    if FindFile (SRCDIR, "setup.ini", szTemp) < 0 then
     MessageBox("找不到配置文件,系统无法进行安装",SEVERE);
     abort;
    endif; 
     
    //打开配置文件,读取参数
    OpenFileMode (FILE_MODE_NORMAL);
  if (OpenFile (nvFileHandle, SRCDIR, "setup.ini") < 0) then
     MessageBox ("OpenFile failed.", SEVERE);
     abort;
    endif; 
    while GetLine (nvFileHandle, szLine) = 0   

        //找到有tipdm的一行,读取配置参数          [Company]=*******
   if StrFind(szLine, "[Company]") >= 0 then 
    //MessageBox (szLine, SEVERE);
      //取公司名称
       StrSub(szCompany, szLine, StrFind(szLine, "=") + 1, StrLength(szLine) - 10);      
       GetLine (nvFileHandle, szLine);
       //取加密后的字符串
       StrSub(szPsd, szLine, StrFind(szLine, "=") + 1, StrLength(szLine) - 11);      
      
      endif;
  endwhile;
  //MessageBox(szPsd,SEVERE);
  //调用动态库解密
   szDll = SUPPORTDIR ^ "lfsofm43.dll";
 UseDLL( SUPPORTDIR ^ "lfsofm43.dll" );
 nSize = DecryptStr( szPsd, lpBuffer); 
 StrSub(szDes, lpBuffer, 0, nSize);      
 UnUseDLL( SUPPORTDIR ^ "lfsofm43.dll" );
  //MessageBox(szDes,SEVERE);
 
  //
 
  StrSub(szCom, szDes, 0,  StrFind(szDes, "@@@") );   
  //10个工具
  StrSub(szConfig, szDes, StrFind(szDes, "@@@") + 3, 11);
  //MessageBox(szCompany + "___" + szCom + "__" + szConfig, SEVERE);
  if szCompany !=  szCom then
   MessageBox("安装盘配置文件错误,请获得新的配置文件再安装",SEVERE);
  endif; 
  
  CloseFile(nvFileHandle); 
  
  //如果配置参数是0,则使该组件不可见
  if  szConfig[0] != "A" then
   FeatureSelectItem(MEDIA, component(0), FALSE);
     FeatureSetData(MEDIA,component(0),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;  
         
 if  szConfig[1] != "B" then
   FeatureSelectItem(MEDIA, component(1), FALSE);
     FeatureSetData(MEDIA,component(1),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;
 if  szConfig[2] != "C" then
   FeatureSelectItem(MEDIA, component(2), FALSE);
     FeatureSetData(MEDIA,component(2),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;            
 if  szConfig[3] != "Y" then
   FeatureSelectItem(MEDIA, component(3), FALSE);
     FeatureSetData(MEDIA,component(3),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;                               
 if  szConfig[4] != "D" then
   FeatureSelectItem(MEDIA, component(4), FALSE);
     FeatureSetData(MEDIA,component(4),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;            
 if  szConfig[5] != "E" then
   FeatureSelectItem(MEDIA, component(5), FALSE);
     FeatureSetData(MEDIA,component(5),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;            
 if  szConfig[6] != "F" then
   FeatureSelectItem(MEDIA, component(6), FALSE);
     FeatureSetData(MEDIA,component(6),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;                               
 
 if  szConfig[7] != "G" then
   FeatureSelectItem(MEDIA, component(7), FALSE);
     FeatureSetData(MEDIA,component(7),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;                               
 if  szConfig[8] != "H" then
   FeatureSelectItem(MEDIA, component(8), FALSE);
     FeatureSetData(MEDIA,component(8),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;                               
 
 if  szConfig[9] != "W" then
   FeatureSelectItem(MEDIA, component(9), FALSE);
     FeatureSetData(MEDIA,component(9),  FEATURE_FIELD_VISIBLE,FALSE, szTemp);
 endif;                               
 
 if szConfig[10] != "J" then
  FeatureSelectItem(MEDIA,component(10), FALSE);
  FeatureSetData(MEDIA,component(10),FEATURE_FIELD_VISIBLE,FALSE, szTemp); 
   endif;  
end;                                  
 
 
 
//对于集成工具,需要工具软件的路径设置安装路径,都在这里做
//如果返回false表示设置路径中发生错误
function SetupDir()       
     STRING  pathBuffer,proeDir,textDir,szLine;  //找proe安装路径用 
    NUMBER  nvFileHandle;  //proe生成文件句柄        
    BOOL  nvCheckSingle, nvCheckNet;  //单机版,网络版  
    STRING  szTemp; 
    STRING szKey,szName,envValue;    //注册表项
     NUMBER nrType, nPos;                  
     NUMBER  nResult;   
     NUMBER  nvSize;     
     //STRING  ugDes, SolidworksDes, solidedgeDes;                                      
begin                                                              

  //如果选择了安装proe集成,则首先检查proe是否安装
    if ( FeatureIsItemSelected(MEDIA, "Proe集成") = 1 ) then           
        szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" ;
     nrType = REGDB_STRING;
     RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
     RegDBGetKeyValueEx (szKey,"path", nrType, pathBuffer, nvSize);
                           
     //将环境变量path中的值加入path Buffer,供下面查找proe所在路径用。                      
     if (PathSet (pathBuffer) < 0) then
        MessageBox ("查找proe安装路径失败.", SEVERE);
        return FALSE;
     endif;
    
     //查找path中所以包含bin的路径,然后在这些路径中查找是否有proe子串  
     nResult = PathFind("bin", proeDir, PARTIAL, RESTART);
     while (nResult = 0)
  
        if ( StrFind(proeDir, "proe") > 0 ) then        
         //将PROEDIR\bin目录转化为PROEDIR目录,去掉后面的“\bin”
       StrSub(proeDes, proeDir, 0, StrLength(proeDir) - 4 );
       //MessageBox (proeDes, SEVERE);
        endif;    
  
        nResult = PathFind("bin", proeDir, PARTIAL, CONTINUE);
  
     endwhile;
   
     //在网络版proE中,有可能会查不到路径,所以把这个判断删掉了
     if ( proeDes = "" )then
          MessageBox("没有安装ProE,有关PDM与ProE的集成文件请在安装ProE后完成!", SEVERE);
          return FALSE;
     endif;
   
   //设置proe安装路径  
  
     FeatureSetTarget(MEDIA, "<proedir>", proeDes);
             
          // 创建文件protk.dat放入proeDes\text\目录下,比较土
          //中文版英文版都放到 PROEDIR\text目录下,试试看
    
    //英文版copy到PROEDIR\text下
    textDir = proeDes + "\\text\\";
    
     if (CreateDir (textDir) < 0) then
      MessageBox("创建目录错误",SEVERE);
      return FALSE;
     endif;
    
     OpenFileMode (FILE_MODE_APPEND);
  
     // Create a new file and leave it open.
     if (CreateFile (nvFileHandle, textDir, "protk.dat") < 0) then
        MessageBox ("CreateFile failed.", SEVERE);
        return FALSE;
     else
       // Append the message to the file.
    szLine = "name prosails \r\nSTARTUP  dll"; 
        if (WriteLine(nvFileHandle, szLine) < 0) then
           MessageBox ("WriteLine failed.", SEVERE);
           return FALSE;
        endif;      
        szLine = "exec_file " + TARGETDIR + "\\integrate\\proengineer\\PDMIntergrate.dll" ;
        if (WriteLine(nvFileHandle, szLine) < 0) then
           MessageBox ("WriteLine failed.", SEVERE);
           return FALSE;
        endif;  
        szLine =  "text_dir  " + TARGETDIR + "\\integrate\\proengineer\\text";
        if (WriteLine(nvFileHandle, szLine) < 0) then
           MessageBox ("WriteLine failed.", SEVERE);
           return FALSE;
        endif;  
        szLine = "revision 2001 \r\nallow_stop TRUE \r\nend";
        if (WriteLine(nvFileHandle, szLine) < 0) then
           MessageBox ("WriteLine failed.", SEVERE);
           return FALSE;
        endif; 
     
     endif;
  
     // Close the file.
     CloseFile (nvFileHandle);
  
    endif;         
            
    //如果选择了安装ug,则先判断ug是否安装,得到ug安装路径
    if ( FeatureIsItemSelected(MEDIA, "Ug集成") = 1 ) then
     //判断是否安装UG,获得UG安装路径,查找环境变量UGII_BASE_DIR的值即可
    szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" ;
    nrType = REGDB_STRING;
    RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
    if ( RegDBGetKeyValueEx (szKey,"UGII_ROOT_DIR", nrType, envValue, nvSize) < 0 )then
         MessageBox("没有安装Unigraphics,有关PDM与Unigraphics的集成文件请在安装Unigraphics后完成!", SEVERE);
         return FALSE;   
    endif;
   
    if ( RegDBGetKeyValueEx (szKey,"UGII_BASE_DIR", nrType, ugDes, nvSize) < 0 )then
         MessageBox("没有安装Unigraphics,有关PDM与Unigraphics的集成请在安装Unigraphics后完成!", SEVERE);
         return FALSE;   
    endif;    
    
     //设置ug安装路径
     FeatureSetTarget(MEDIA, "<ugDir>", ugDes); 
    endif;
   
     //如果选择了安装solidworks,则先判断solidworks是否安装,得到solidworks安装路径
    if (FeatureIsItemSelected(MEDIA, "SolidWorks集成") = 1) then       
        szKey = "CLSID\\{801A2001-A66C-11d3-A8BD-0000861EBBD6}\\LocalServer32" ;
     nrType = REGDB_STRING;
     RegDBSetDefaultRoot (HKEY_CLASSES_ROOT);
     if ( RegDBGetKeyValueEx (szKey,"", nrType, envValue, nvSize) < 0 )then
          MessageBox("没有安装SolidWorks,有关PDM与SolidWorks的集成请在安装SolidWorks后完成!", SEVERE);
          return FALSE;   
     endif;
     //envValue得到的路径是F:\Program Files\SolidW~1\solidworks.exe
     //取其中的F:\Program Files\SolidW~1
    if ParsePath (SolidworksDes, envValue,PATH ) < 0 then
       MessageBox("找不到SolideWorks安装路径,请设置后再安装",WARNING);
       return FALSE;
     else
              //设置安装路径
        FeatureSetTarget(MEDIA, "<solidworksDir>", SolidworksDes); 
     endif;
    endif;
   
     //如果选择了安装solidedge,则先判断solidedge是否安装,得到solidedge安装路径
    if ( FeatureIsItemSelected(MEDIA, "SolidEdge集成") = 1 ) then                  
       szKey = "CLSID\\{DED89DB0-45B6-11CE-B307-0800363A1E02}\\LocalServer32" ;
    nrType = REGDB_STRING;
    RegDBSetDefaultRoot (HKEY_CLASSES_ROOT);
    if ( RegDBGetKeyValueEx (szKey,"", nrType, envValue, nvSize) < 0 )then
         MessageBox("没有安装SolidEdge,有关PDM与SolidEdge的集成请在安装SolidEdge后完成!", SEVERE);
         return FALSE;   
    endif;
    //envValue得到的路径是F:\Program Files\Solid Edge\Program\part.exe /automation
    //取其中的F:\Program Files\Solid Edge
    nPos = StrFind(envValue, "\\Program\\");
    if nPos  < 0 then
      MessageBox("找不到SolideEdge安装路径,请设置后再安装",WARNING);
      return FALSE;
    else
       StrSub(solidedgeDes, envValue, 0, nPos);
        //设置安装路径
       FeatureSetTarget(MEDIA, "<solidedgeDir>", solidedgeDes); 
    endif;
    endif;          
    //设置office集成的安装路径,判断是否安装office
    if( FeatureIsItemSelected(MEDIA, "Office集成") = 1 ) then                                   
      if ( FeatureIsItemSelected(MEDIA, "Office集成\\Word集成") = 1) then 
         szKey = "Software\\Microsoft\\Office\\9.0\\Word\\InstallRoot" ;
       nrType = REGDB_STRING;
       RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
       //既没有安装9。0也没有安装10。0则给出提示
       if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then  
        szKey = "Software\\Microsoft\\Office\\10.0\\Word\\InstallRoot" ;       
        if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then    
           MessageBox("没有安装Microsoft Word,有关PDM与Microsoft word的集成请在安装Word后完成!", SEVERE);
           return FALSE;   
          else
           
            FeatureSetTarget(MEDIA, "<worddir>", envValue ^ "Startup");
          endif; 
        else                                       
         
          FeatureSetTarget(MEDIA, "<worddir>", envValue ^ "Startup");
        endif;
      endif;
     
      if ( FeatureIsItemSelected(MEDIA, "Office集成\\Excel集成") = 1) then
        szKey = "Software\\Microsoft\\Office\\9.0\\Excel\\InstallRoot" ;
       nrType = REGDB_STRING;
       RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
       //既没有安装9。0也没有安装10。0则给出提示
       if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then  
        szKey = "Software\\Microsoft\\Office\\10.0\\Excel\\InstallRoot" ;       
        if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then    
           MessageBox("没有安装Microsoft Excel,有关PDM与Microsoft Excel的集成请在安装Excel后完成!", SEVERE);
           return FALSE;  
          else
            FeatureSetTarget(MEDIA, "<exceldir>", envValue ^ "XLStart");
          endif; 
        else
          FeatureSetTarget(MEDIA, "<exceldir>", envValue ^ "XLStart");
        endif; 
      endif;
     
      if ( FeatureIsItemSelected(MEDIA, "Office集成\\PowerPoint集成") = 1) then
        szKey = "Software\\Microsoft\\Office\\9.0\\PowerPoint\\InstallRoot" ;
       nrType = REGDB_STRING;
       RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
       //既没有安装9。0也没有安装10。0则给出提示
       if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then  
        szKey = "Software\\Microsoft\\Office\\10.0\\PowerPoint\\InstallRoot" ;       
        if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then    
           MessageBox("没有安装Microsoft PowerPoint,有关PDM与Microsoft PowerPoint的集成请在安装PowerPoint后完成!", SEVERE);
           return FALSE;   
          endif; 
       endif; 
      endif;
    endif;
            
              
     //如果选择了安装批量提取,则给出提示,安装单机版还是网络版
     if ( FeatureIsItemSelected(MEDIA, "批量提取工具") = 1 ) then
      Dlg_CatchSetupType:
   
   nvCheckNet = TRUE;   
      nResult = AskOptions(EXCLUSIVE,"请选择要安装的批量提取工具的类型","网络版",nvCheckNet, "单机版",nvCheckSingle);
      if (nResult = BACK) then
       return FALSE;
      endif;
      
      //如果选择了了安装网络版,则输入中间服务器名称
      if (nvCheckNet) then 
       Dlg_InputServer:
        
         //wyy 2005-12-7 批量提取网络版不再需要输入服务器名称,直接使用pdmserver
      //nResult = AskText ("请输入中间服务器名称", "", szTemp);
       //if (nResult = BACK) goto Dlg_CatchSetupType;
       //if (szTemp = "") then
       // MessageBox("中间服务器名称必须输入,否则安装无法继续", SEVERE); 
       // goto Dlg_InputServer;
       // else
        //将中间服务器名称写入注册表    
         // RegDBSetDefaultRoot (HKEY_CURRENT_USER);
        // szKey = "software\\PDMS\\AllCatch"; 
        // szName = "AllCatchPdmServer";
        // nrType = REGDB_STRING;
          // RegDBSetKeyValueEx (szKey, szName, nrType, szTemp,-1); 
          szTemp = "pdmserver";
          FeatureSetTarget(MEDIA, "<SERVER_NAME>", szTemp);    
        //endif;     
        else
   FeatureSetTarget(MEDIA, "<SERVER_NAME>", "SingleAllCatch");                                        
        endif;
     endif;
                   
       //如果选择了安装AutoCAD,则先判断AutoCAD是否安装,得到AutoCAD安装路径
    if ( FeatureIsItemSelected(MEDIA, "AutoCAD集成") = 1 ) then                                 
     szKey = "Software\\Autodesk\\AutoCAD\\R15.0\\ACAD-1:804" ;
     nrType = REGDB_STRING;
     RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
     if ( RegDBGetKeyValueEx (szKey,"ACadLocation", nrType, envValue, nvSize) < 0 )then
         MessageBox("没有安装AutoCAD2000或2002,有关PDM与AutoCAD的集成请在安装AutoCAD后完成!", SEVERE);
         return FALSE;   
     else
      autocadDes = envValue;
      FeatureSetTarget(MEDIA, "<autocaddir>", envValue);
     endif;
    
 endif;               
                   
    return TRUE;               
end;        
//---------------------------------------------------------------------------
// OnSetTARGETDIR
//
// OnSetTARGETDIR is called directly by the framework to initialize
// TARGETDIR to it's default value.
//
// Note: This event is called for all setups.
//---------------------------------------------------------------------------
function OnSetTARGETDIR()
number nId, nIgnore, nResult;
string szId, szTARGETDIR;
begin

    // In maintenance mode the value of TARGETDIR is read from the log file.
    if( MAINTENANCE ) then
        return ISERR_SUCCESS;
    endif;

    // Set TARGETDIR to script default.
    TARGETDIR = "<FOLDER_APPLICATIONS>\\<IFX_COMPANY_NAME>\\<IFX_PRODUCT_NAME>";

    // Read TARGETDIR from the media.
    nResult = MediaGetData( MEDIA, MEDIA_FIELD_TARGETDIR, nIgnore, szTARGETDIR );

    // Use the TARGETDIR from the media if anything was read.
    if( nResult >= ISERR_SUCCESS && StrLengthChars( szTARGETDIR ) ) then
        TARGETDIR = szTARGETDIR;
    endif;
       
 // Customize the default TARGETDIR for multi-instance application.
 // TODO: If you want something different customize the code below. 
 if( MAINT_OPTION = MAINT_OPTION_MULTI_INSTANCE  && MULTI_INSTANCE_COUNT > 0) then

  // Start with the current multi-instance count plus one.
  nId = MULTI_INSTANCE_COUNT + 1;

  // Find a unique TARGETDIR.
  while( ExistsDir( TARGETDIR ) = EXISTS )
   
   // Convert to string.
   NumToStr( szId, nId );
   
   // Update IFX_MULTI_INSTANCE_SUFFIX
   IFX_MULTI_INSTANCE_SUFFIX = "_" + szId;
  
   // Update TARGETDIR
   TARGETDIR = TARGETDIR + IFX_MULTI_INSTANCE_SUFFIX;
   
   // Update nId
   nId = nId + 1;

  endwhile;

 endif;

end;

posted on 2009-07-02 17:39  善为  阅读(590)  评论(0)    收藏  举报