SeekBytes Example

InstallShield 2016 » InstallScript Language Reference

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 ReadBytes and SeekBytes functions.

*

* SeekBytes is called to position a file pointer to a

* specific location in a file that has been opened in binary

* mode.  ReadBytes then reads a specific number of bytes,

* starting at this location. The bytes are read into a string,

* which is then displayed in a message box.

*

* Note: The defined constants EXAMPLE_DIR and EXAMPLE_BIN must

*       be set to an existing directory and file on the target

*       system.

*

\*--------------------------------------------------------------*/

 

#define EXAMPLE_DIR "C:\\"

#define EXAMPLE_BIN "Example.bin"

 

// Include Ifx.h for built-in InstallScript function prototypes.

#include "Ifx.h"

 

export prototype ExFn_SeekBytes(HWND);

 

function ExFn_SeekBytes(hMSI)

   STRING svString;

    NUMBER nvFileHandle;

begin

 

   // Set the file mode to read/write.

   OpenFileMode (FILE_MODE_BINARY);

 

   // Open a binary file.

   if (OpenFile (nvFileHandle, EXAMPLE_DIR, EXAMPLE_BIN) < 0) then

 

      // Report an error; then abort.

      SprintfBox (SEVERE, "CopyBytes Example", "Could not open %s.",

                  EXAMPLE_BIN);

      abort;

 

   endif;

 

   // Set the file pointer to the 16th byte in the file.

   SeekBytes (nvFileHandle, 15, FILE_BIN_START);

 

   // Read the next twenty-eight bytes into svString.

   if (ReadBytes (nvFileHandle, svString, 0, 28) < 0) then

 

      // Report an error.

      MessageBox ("ReadBytes failed.", SEVERE);

   else

 

      // Display the string.

      SprintfBox (INFORMATION, "ReadBytes Example", "Bytes read: %s",

svString);

 

   endif;

 

   // Close the file.

   CloseFile (nvFileHandle);

 

end;