Summary
This article gives information about getting IA variables from within Custom Code.Synopsis
This article gives information about getting IA variables from within Custom Code.Discussion
A common problem when accessing the values of IA variables from within Custom code is the improper use of the getVariable() and substitute() methods. The most common problem is the use of getVariable() on a Magic Folder object (for instance, $USER_INSTALL_DIR$) and then trying to cast this to a String.For instance:
String instDir = (String)ip.getVariable("USER_INSTALL_DIR");
It is not possible to cast a MagicFolder object to a String -- this will throw an exception. What you should do instead is use the 'substitute' method described in the JavaDocs. For instance, this code would work as expected:
String instDir = ip.substitute("$USER_INSTALL_DIR$");
If the variable you are getting from the installer is a developer defined variable, using getVariable will work as expected.
However, if your developer defined variable embeds another IA variable (for instance, if you had used a "Set InstallAnywhere Variable" action to set "MY_VAR" equal to "$USER_INSTALL_DIR$/some/other/path/values"), what you will want to do to properly resolve the variables that you are setting is a two step process (this is necessary because you are embedding one variable within another variable). Your custom code when attempting to get the value of the variable should look like:
// Get input from InstallAnywhere Variables. The literal contents of
// the Variables are retrieved into the Strings.
String myVar = (String)ip.getVariable("MY_VAR");
// Resolve any IA Variables or Magic Folders contained in the literal
// contents of the Strings .
myVar = (String)ip.substitute(myVar);
Note, this code will throw an exception if you are trying to get a MagicFolder IA Variable directly (such as, USER_INSTALL_DIR) -- see above. If you are trying to get one of these values directly, use substitute().
Note: when including file path separators in a variable that you will want to use cross-platform, use the IA variable "$/$" (no quotes). For instance, the sample "Set InstallAnywere Variable" action above would best be written:
"$USER_INSTALL_DIR$$/$some$/$other$/$path$/$values" (no quotes)
There is also a platform-agnostic classpath separator, it is: "$;$" (no quotes).
Was this helpful?
Related Articles
Setting an InstallAnywhere Variable from within Custom Code 7Number of Views Enumerating InstallAnywhere Variables at Run Time Using Custom Code Action 6Number of Views InstallAnywhere Custom Code Panels 8Number of Views Localizing Custom Code 4Number of Views Using a Custom Code Action/Panel in an Installer with InstallAnywhere 7Number of Views
Revenera Assistant
Online
Hi, I am Reva - Ask me anything.
Updates
No new updates
Chat
Home
Updates
/**/
Thanks for the feedback!
Your feedback has been saved.Rate this response:
1
2
3
4
5
Add Additional feedback ( Optional )
0/240
English
English
Language changed successfully
Something went wrong
Email sent successfully
Something went wrong
Case create successfully
Are you sure you want to cancel
the case creation?
Please select a product to submit the case.
Please select a product version to submit the case.
0/255
Upload Attachment
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to cancel the case creation?
Case closed successfully
File Upload
Maximum file size allowed is 3 MB.
File type not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to close this case
| Products | Region | Phone Numbers |
|---|---|---|
| FlexNet Operations FlexNet Embedded FlexNet Publisher FlexNet Connect FlexNet Code Insight InstallAnywhere InstallShield |
North America * |
+1 630-332-2513 (toll) +1 877-279-2853 (toll-free in North America) |
| Europe * |
+44 1925 944367 (toll) +44 800 047 8642 (toll-free in Europe) |
|
| Japan * | +81 3-4540-5335 (select option 2) | |
| Australia * |
+61 3 9895 2177 +61 1800 560 603 (toll-free in Australia) |
|
|
Usage Intelligence (formerly
Revulytics) Compliance Intelligence |
Please use the Case Portal to submit your support ticket or reach out to your Revenera contact. | |
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
© 2026 Flexera Software. All Rights Reserved.
Case id: 00001065
Activity: Status change: 2 hours ago