Link to home
Start Free TrialLog in
Avatar of BrianMc1958
BrianMc1958

asked on

InstallShield Pro NEWBIE: How to implement AskPath?

Dear Experts,

I work for a small company, and I'm afraid I'm in way over my head on this one thing:  I need to modify our InstallShield Pro (11.5) setup to allow the user to select the target pack and directory.  So far, we have done only the simplest things with InstallShield (mostly in Express), and I know next to nothing about the more advanced features.

I have found this AskPath example (below) in their Help, but I have no idea how to implement it. (Where do I PUT it?)  I don't know what an "entry-point function" is, or how to "execute the custom action in a sequence".  Could anyone either tell me some step-by-step instructions, or maybe point me to a user-friendly site for beginners?  

Thanks a lot!
--BrianMc1958


NOTE
To call this function in a Basic MSI setup, you must first create a custom action for the entry-point function, execute the custom action in a sequence or as the result of a dialog's control event, and then build the release.
/*-----------------------------------------------------------*\
 * InstallShield Example Script
 * Demonstrates the AskPath function.
 * This script obtains the path to a folder on the
 * end user's computer.  If the path does not exist, it creates
 * a folder at that location if indicated by the
 * end user.  Finally, it displays the selected path.
 *
\*-----------------------------------------------------------*/
// Include Ifx.h for built-in InstallScript function prototypes.

#include "Ifx.h"
      export prototype ExFn_AskPath(HWND);
function ExFn_AskPath(hMSI)
    STRING szMsg, svResultPath[101];
    BOOL bTargetDirOk;
begin
    // Disable the Back button in installation dialog boxes.
    Disable (BACKBUTTON);
    // Create the message to display in the AskPath dialog box.
    szMsg = "Specify a folder for the application.";
    // Initialize valid path indicator.
    bTargetDirOk = FALSE;
    repeat
        // Get a path from the user.  The default path is
        // the current value of the system variable INSTALLDIR.
        if (AskPath (szMsg, INSTALLDIR, svResultPath) = NEXT) then
            // Does the path entered by the user exist on the
            // target system?
            if (ExistsDir (svResultPath) = 0) then
                // If it exists, set indicator to exit the loop.
                bTargetDirOk = TRUE;
            else
                // If the path doesn't exists, ask if it should be created.
                 if (AskYesNo ("Folder does not exist. Create it?",YES) = YES) then
                    // Attempt to create the folder (directory).
                    if (CreateDir (svResultPath) =0) then
                        // If the folder was created, set indicator to exit the loop.
                        bTargetDirOk = TRUE;
                    else
                        // Inform the end user that the folder was not created.
                        MessageBox ("Unable to create " "+ svResultPath, WARNING);
                    endif;
                endif;
            endif;
        endif;
    until bTargetDirOk;
    // Display the name of the target folder.
    MessageBox ("The target folder is " + svResultPath, INFORMATION);
    // You'd also enable the Back button for subsequent dialog boxes.
    Enable (BACKBUTTON);
end;

ASKER CERTIFIED SOLUTION
Avatar of ded9
ded9
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial