как добавить два типа установки в один установочный файл в скрипте установки

Я использую InstallShield 2013 для развертывания пакетов и хочу добавить два типа установки (два приложения) в один установочный файл. Я имею в виду, что пользователь должен иметь возможность выбрать, какое приложение будет установлено при запуске установочного файла в installShield.

Фон

В моем установочном файле есть два приложения: Console и Viewer. Пользователь может выбрать нужное ему приложение, но дальнейшая установка выбранного приложения не работает. Нужна помощь!

Вот мой код.

function OnFirstUIBefore()
      NUMBER nResult, nType;   
      STRING szTitle, szMsg, svResult, szCaption;   
      NUMBER nSetupType, nvSize, nUser, nReserved;
      STRING szQuestion, svName, svCompany, szFile, szLicense;
      STRING szLicenseFile,szReserved, svSetupType;
      LIST list, listStartCopy;
      BOOL bCustom, bCopy, bDontCopy;

begin           
      MessageBox("OnFirstUIBefore()",0);
      SHELL_OBJECT_FOLDER = @PRODUCT_NAME;     
      nSetupType = CUSTOM;     
      bCopy = FALSE ; 
      bDontCopy = TRUE ; 
      bCustom = TRUE;      
      szLicense = SUPPORTDIR^ "AbcTerms.rtf";   

Dlg_SdWelcome:
    szTitle = "";
    szMsg   = "";
    nResult = SdWelcome(szTitle, szMsg);
    if (nResult = BACK) goto Dlg_SdWelcome; 
    szTitle   = "";
    svName    = "";
    svCompany = "";   

Dlg_SdLicense:            
   nResult = SdLicense2Rtf ( "","" , "", szLicense , FALSE );    
   if(nResult = BACK) goto  Dlg_SdWelcome;

Dlg_SdCustomerInformation:
    nResult = SdCustomerInformation(szTitle, svName, svCompany, nUser);
    if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SetupType:            
    szTitle = "Please select installation type"; 
    szMsg = ""; 
    szReserved  = ""; 
    svSetupType = "Viewer"; 
    nReserved   = 0;  

    nResult = SdSetupTypeEx(szTitle, szMsg, szReserved, svSetupType, nReserved);
    INSTALLTYPE =  svSetupType;   //"Console";//  
    if(svSetupType == "Console") then  
         MsiSetProperty( ISMSI_HANDLE, "DOCUSTOMEACTION" , 'copy' ); 
         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" ,  "ConsoleV3");//"1:3"           
    else
         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" , "ViewerV3" );     //"1:2"        
    endif;
    MsiSetProperty( ISMSI_HANDLE, "SOURCEPATH" , SourceDir ); 
    if (nResult = BACK) goto Dlg_SdCustomerInformation; 

Dlg_SdAskDestPath:      
    nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0);
    if (nResult = BACK) goto Dlg_SetupType;     
Enable(STATUSEX);
    return 0; end;    

Отредактированный код

function OnFirstUIBefore()
      NUMBER nResult, nType;   
      STRING szTitle, szMsg, svResult, szCaption;   
      NUMBER nSetupType, nvSize, nUser, nReserved;
      STRING szQuestion, svName, svCompany, szFile, szLicense;
      STRING szLicenseFile,szReserved, svSetupType;
      LIST list, listStartCopy;
      BOOL bCustom, bCopy, bDontCopy;

begin           
      MessageBox("OnFirstUIBefore()",0);
      SHELL_OBJECT_FOLDER = @PRODUCT_NAME;     
      nSetupType = CUSTOM;     
      bCopy = FALSE ; 
      bDontCopy = TRUE ; 
      bCustom = TRUE;      
      szLicense = SUPPORTDIR^ "AbcTerms.rtf";   

Dlg_SdWelcome:
    szTitle = "";
    szMsg   = "";
    nResult = SdWelcome(szTitle, szMsg);
    if (nResult = BACK) goto Dlg_SdWelcome; 
    szTitle   = "";
    svName    = "";
    svCompany = "";   

Dlg_SdLicense:            
   nResult = SdLicense2Rtf ( "","" , "", szLicense , FALSE );    
   if(nResult = BACK) goto  Dlg_SdWelcome;

Dlg_SdCustomerInformation:
    nResult = SdCustomerInformation(szTitle, svName, svCompany, nUser);
    if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SetupType:            
    szTitle = "Please select installation type"; 
    szMsg = ""; 
    szReserved  = ""; 
    svSetupType = "Viewer"; 
    nReserved   = 0;  

    nResult = SdSetupTypeEx(szTitle, szMsg, szReserved, svSetupType, nReserved);
    INSTALLTYPE =  svSetupType;   //"Console";// 

    MsiSetProperty( ISMSI_HANDLE, "DOCUSTOMEACTION" , 'copy' );

    if(svSetupType == "Console") then  

         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" ,  "ConsoleV3");//"1:3"           
    else
         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" , "ViewerV3" );     //"1:2"        
    endif;
    MsiSetProperty( ISMSI_HANDLE, "SOURCEPATH" , SourceDir ); 
    if (nResult = BACK) goto Dlg_SdCustomerInformation; 

Dlg_SdAskDestPath:      
    nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0);
    if (nResult = BACK) goto Dlg_SetupType;     
Enable(STATUSEX);
    return 0; end;

person Senavirathna    schedule 05.12.2014    source источник
comment
Чтобы понять, что вы хотите сделать, у меня есть несколько вопросов: Ваш проект типа InstallScript MSI, верно? Хотите, чтобы вы ожидали результата от вашего проекта InstallShield? msi или InstallShield Setup.exe? Какие у вас два пакета? msi-файлы?   -  person LucasF    schedule 05.12.2014
comment
Это проект InstallShield Setup.exe. Он включает даже часть InstallScript. Существует два варианта установки: Viewer и Console. Пользователь должен иметь возможность выбрать ожидаемое приложение (Setup Design), и процесс установки должен идти по порядку.   -  person Senavirathna    schedule 08.12.2014
comment
@LucasF, отредактированный код работает нормально.   -  person Senavirathna    schedule 11.12.2014
comment
Повезло тебе. Консольный режим работал и со старым кодом? Так что вам пришлось сделать MsiSetProperty( ISMSI_HANDLE, "DOCUSTOMEACTION" , 'copy' ); для обоих INSTALLMODE.   -  person LucasF    schedule 11.12.2014
comment
да. Если существует более одного типа установки, то MsiSetProperty(ISMSI_HANDLE, DOCUSTOMEACTION, 'copy'); должен запускаться первым. Тогда дальнейшая установка для любого типа установки работает очень хорошо.   -  person Senavirathna    schedule 11.12.2014


Ответы (1)


Это прекрасно работает.

function OnFirstUIBefore()
      NUMBER nResult, nType;   
      STRING szTitle, szMsg, svResult, szCaption;   
      NUMBER nSetupType, nvSize, nUser, nReserved;
      STRING szQuestion, svName, svCompany, szFile, szLicense;
      STRING szLicenseFile,szReserved, svSetupType;
      LIST list, listStartCopy;
      BOOL bCustom, bCopy, bDontCopy;

begin           
      MessageBox("OnFirstUIBefore()",0);
      SHELL_OBJECT_FOLDER = @PRODUCT_NAME;     
      nSetupType = CUSTOM;     
      bCopy = FALSE ; 
      bDontCopy = TRUE ; 
      bCustom = TRUE;      
      szLicense = SUPPORTDIR^ "AbcTerms.rtf";   

Dlg_SdWelcome:
    szTitle = "";
    szMsg   = "";
    nResult = SdWelcome(szTitle, szMsg);
    if (nResult = BACK) goto Dlg_SdWelcome; 
    szTitle   = "";
    svName    = "";
    svCompany = "";   

Dlg_SdLicense:            
   nResult = SdLicense2Rtf ( "","" , "", szLicense , FALSE );    
   if(nResult = BACK) goto  Dlg_SdWelcome;

Dlg_SdCustomerInformation:
    nResult = SdCustomerInformation(szTitle, svName, svCompany, nUser);
    if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SetupType:            
    szTitle = "Please select installation type"; 
    szMsg = ""; 
    szReserved  = ""; 
    svSetupType = "Viewer"; 
    nReserved   = 0;  

    nResult = SdSetupTypeEx(szTitle, szMsg, szReserved, svSetupType, nReserved);
    INSTALLTYPE =  svSetupType;   //"Console";// 

    MsiSetProperty( ISMSI_HANDLE, "DOCUSTOMEACTION" , 'copy' );

    if(svSetupType == "Console") then  

         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" ,  "ConsoleV3");//"1:3"           
    else
         MsiSetProperty( ISMSI_HANDLE, "INSTALLMODE" , "ViewerV3" );     //"1:2"        
    endif;
    MsiSetProperty( ISMSI_HANDLE, "SOURCEPATH" , SourceDir ); 
    if (nResult = BACK) goto Dlg_SdCustomerInformation; 

Dlg_SdAskDestPath:      
    nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0);
    if (nResult = BACK) goto Dlg_SetupType;     
Enable(STATUSEX);
    return 0; end;
person Senavirathna    schedule 11.12.2014