How can I validate user input?
You can validate user input adding a <validationActionList>
to the parameter. For example, adding the following code to the 'installdir' parameter, will prevent the user from selecting a directory that contains a space.
<validationActionList>
<throwError>
<text>This directory path can not contain spaces</text>
<ruleList>
<compareText>
<text>${installdir}</text>
<logic>contains</logic>
<value> </value>
</compareText>
</ruleList>
</throwError>
</validationActionList>
validation.xml :
<project>
<shortName>sample</shortName>
<fullName>Sample Project</fullName>
<version>1.0</version>
<installerFilename></installerFilename>
<readmeFile></readmeFile>
<licenseFile></licenseFile>
<wrapLicenseFileText>1</wrapLicenseFileText>
<leftImage></leftImage>
<logoImage></logoImage>
<splashImage></splashImage>
<defaultLanguage></defaultLanguage>
<allowLanguageSelection>0</allowLanguageSelection>
<postInstallationScript></postInstallationScript>
<postInstallationScriptArguments></postInstallationScriptArguments>
<showPostInstallationScriptResult>0</showPostInstallationScriptResult>
<preUninstallationScript></preUninstallationScript>
<preUninstallationScriptArguments></preUninstallationScriptArguments>
<allowedLanguages></allowedLanguages>
<cdromDirectory>${product_shortname}-${product_version}-cdrom</cdromDirectory>
<cdromDiskSize>700000000</cdromDiskSize>
<cdromFirstDiskSize>650000000</cdromFirstDiskSize>
<defaultUnixDirectoryPermissions>755</defaultUnixDirectoryPermissions>
<defaultUnixFilePermissions>644</defaultUnixFilePermissions>
<outputDirectory>${installbuilder_install_root}/output</outputDirectory>
<projectSchemaVersion>1.2</projectSchemaVersion>
<saveRelativePaths>0</saveRelativePaths>
<slideShowLoop>1</slideShowLoop>
<slideShowTiming>5</slideShowTiming>
<startMenuGroupName>${product_fullname}</startMenuGroupName>
<style>standard</style>
<uninstallerDirectory></uninstallerDirectory>
<validatorProgram></validatorProgram>
<componentList>
<component>
<name>default</name>
<description>Default Component</description>
<canBeEdited>1</canBeEdited>
<detailedDescription></detailedDescription>
<selected>1</selected>
<show>1</show>
<desktopShortcutList/>
<folderList>
<folder>
<description>Program Files</description>
<destination>${installdir}</destination>
<name>programfiles</name>
<platforms>all</platforms>
<shortcutList>
<shortcut>
<comment>Uninstall</comment>
<exec>${installdir}/uninstall</exec>
<icon></icon>
<name>Uninstall ${product_fullname}</name>
<path>${installdir}</path>
<platforms>all</platforms>
<windowsExec>${installdir}/uninstall.exe</windowsExec>
<windowsExecArgs></windowsExecArgs>
<windowsIcon></windowsIcon>
<windowsPath>${installdir}</windowsPath>
</shortcut>
</shortcutList>
</folder>
<folder>
<description>Program Files</description>
<destination>${installdir}</destination>
<name>programfileslinux</name>
<platforms>linux</platforms>
</folder>
<folder>
<description>Program Files</description>
<destination>${installdir}</destination>
<name>programfileswindows</name>
<platforms>windows</platforms>
</folder>
</folderList>
<startMenuShortcutList>
<startMenuShortcut>
<comment>Uninstall ${product_fullname}</comment>
<name>Uninstall ${product_fullname}</name>
<windowsExec>${installdir}/uninstall.exe</windowsExec>
<windowsExecArgs></windowsExecArgs>
<windowsIcon></windowsIcon>
<windowsPath>${installdir}/</windowsPath>
</startMenuShortcut>
</startMenuShortcutList>
</component>
</componentList>
<customLanguageFileList/>
<fileList/>
<parameterList>
<directoryParameter>
<name>installdir</name>
<title></title>
<description>Installer.Parameter.installdir.description</description>
<explanation>Installer.Parameter.installdir.explanation</explanation>
<value></value>
<default>${platform_install_prefix}/${product_shortname}-${product_version}</default>
<allowEmptyValue>0</allowEmptyValue>
<ask>yes</ask>
<cliOptionName>prefix</cliOptionName>
<leftImage></leftImage>
<mustBeWritable>yes</mustBeWritable>
<mustExist>0</mustExist>
<width>40</width>
<validationActionList>
<throwError>
<text>This directory path can not contain spaces</text>
<ruleList>
<compareText>
<text>${installdir}</text>
<logic>contains</logic>
<value> </value>
</compareText>
</ruleList>
</throwError>
</validationActionList>
</directoryParameter>
</parameterList>
<platformOptionsList/>
<postInstallationActionList/>
<preBuildActionList/>
<preInstallationActionList/>
<preUninstallationActionList/>
<slideShowImageList/>
</project>