<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>BitRock Knowledge Base</title>
    <link>http://support.bitrock.com/contents</link>
    <atom:link href="http://support.bitrock.com/contents.rss" type="application/rss+xml" rel="self"/>
    <description>BitRock Knowledge Base.</description>
    <pubDate>Wed, 08 Sep 2010 15:09:21 GMT</pubDate>
    <item>
      <title>Why does my Windows installer takes so much time to start in Windows Vista / Windows 7?</title>
      <link>http://support.bitrock.com/article/why-my-windows-installer-takes-so-much-time-to-start-in-windows-vista-windows-7</link>
      <pubDate>Wed, 08 Sep 2010 15:09:21 GMT</pubDate>
      <description>The cause of this issue is the UAC mechanism. When an installer is executed and it requires UAC intervention, Windows copies the installer to the %TEMP% directory and launches the copy. Then the UAC dialog is displayed to rise privileges.

For small installers, this process is performed quickly and the delay is not noticeable. If you are executing a big installer, it could take a noticeable amount of time. To prevent this from happening you could set the &amp;lt;requestedExecutionLevel&amp;gt; to asInvoker:

&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
       ...
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;requestedExecutionLevel&amp;gt;&lt;/span&gt;asInvoker&lt;span class=&quot;ta&quot;&gt;&amp;lt;/requestedExecutionLevel&amp;gt;&lt;/span&gt;
       ...
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

The generated installer won't trigger the UAC and will be executed with the privileges of the caller. This could lead to permission issues as a regular user will be able to install the installers. To avoid this, if the installer performs any operation requiring administrator privileges, we should always use &amp;lt;requireInstallationByRootUser&amp;gt;1&amp;lt;/requireInstallationByRootUser&amp;gt; to make sure just Administrators will install our application:

&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
       ...
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;requireInstallationByRootUser&amp;gt;&lt;/span&gt;1&lt;span class=&quot;ta&quot;&gt;&amp;lt;/requireInstallationByRootUser&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;requestedExecutionLevel&amp;gt;&lt;/span&gt;asInvoker&lt;span class=&quot;ta&quot;&gt;&amp;lt;/requestedExecutionLevel&amp;gt;&lt;/span&gt;
       ...
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

As an additional note, folders with granted permissions for the TrustedInstaller special user (like Program Files) are not affected by this behavior to avoid installed  programs from suffering these delays.
</description>
      <guid>http://support.bitrock.com/article/why-my-windows-installer-takes-so-much-time-to-start-in-windows-vista-windows-7</guid>
    </item>
    <item>
      <title>PostgreSQL cannot allocate memory on Mac OS X</title>
      <link>http://support.bitrock.com/article/postgresql-cannot-allocate-memory-on-mac-os-x</link>
      <pubDate>Mon, 06 Sep 2010 09:57:50 GMT</pubDate>
      <description>When PostgreSQL is included as part of a Mac installer, you may find the following error in some machines during database initialization:&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;
FATAL: could not create shared memory segment:
Cannot allocate memory
DETAIL: Failed system call was shmget(key=1,size=1499136, 03600)
...
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;

&lt;br /&gt;
This problem is related to the fact that some OS X systems are configured with an amount of shared memory which may not be enough to run postgreSQL depending on other applications that may be installed in the machine.&lt;br /&gt;&lt;br /&gt;

You can workaround this by modifying kernel parameters, running the following as root:
&lt;pre&gt;&lt;code&gt;
sysctl -w kern.sysv.shmmax=33554432
sysctl -w kern.sysv.shmmin=1
sysctl -w kern.sysv.shmmni=256
sysctl -w kern.sysv.shmseg=64
sysctl -w kern.sysv.shmall=8192
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;&lt;br /&gt;

This can be made permanent adding the following lines to &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;.
&lt;pre&gt;&lt;code&gt;
kern.sysv.shmmax=33554432
kern.sysv.shmmin=1
kern.sysv.shmmni=256
kern.sysv.shmseg=64
kern.sysv.shmall=8192
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;&lt;br /&gt;

You may consider showing a more specific error message that redirects the user to a detailed description about how to fix the issue. You can do this by checking the returned error message as follows:&lt;br /&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;runProgram&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;abortOnError&amp;gt;&lt;/span&gt;0&lt;span class=&quot;ta&quot;&gt;&amp;lt;/abortOnError&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;showMessageOnError&amp;gt;&lt;/span&gt;0&lt;span class=&quot;ta&quot;&gt;&amp;lt;showMessageOnError&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;runAs&amp;gt;&lt;/span&gt;postgres&lt;span class=&quot;ta&quot;&gt;&amp;lt;/runAs&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;program&amp;gt;&lt;/span&gt;${postgres_root_directory}/bin/initdb&lt;span class=&quot;ta&quot;&gt;&amp;lt;/program&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;programArguments&amp;gt;&lt;/span&gt;-E UTF8 -U postgres&lt;span class=&quot;ta&quot;&gt;&amp;lt;/programArguments&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;/showMessageOnError&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/showMessageOnError&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/runProgram&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;throwError&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;text&amp;gt;&lt;/span&gt;There is not enough shared memory. PostgreSQL component requires a minimum shared memory segment 
of 32MB. Please increase &amp;quot;shmmax&amp;quot; kernel parameter in /etc/sysctl.conf) or close any other PostgreSQL 
instances before restarting installation. Additional information can be found in the installation guide.&lt;span class=&quot;ta&quot;&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${program_exit_code}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;does_not_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${program_stderr}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Cannot allocate memory&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;/throwError&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;throwError&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;text&amp;gt;&lt;/span&gt;${program_stderr}&lt;span class=&quot;ta&quot;&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${program_exit_code}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;does_not_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;/throwError&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;

What EnterpriseDB includes in its readme file about shared memory is shown below:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
Shared Memory
-------------

PostgreSQL uses shared memory extensively for caching and inter-process
communication. Unfortunately, the default configuration of Mac OS X does
not allow suitable amounts of shared memory to be created to run the
database server.

Before running the installation, please ensure that your system is
configured to allow the use of larger amounts of shared memory. Note that
this does not 'reserve' any memory so it is safe to configure much higher
values than you might initially need. You can do this by editting the
file /etc/sysctl.conf - e.g.

% sudo vi /etc/sysctl.conf

On a MacBook Pro with 2GB of RAM, the author's sysctl.conf contains:

kern.sysv.shmmax=1610612736
kern.sysv.shmall=393216
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048

Note that (kern.sysv.shmall * 4096) should be greater than or equal to
kern.sysv.shmmax. kern.sysv.shmmax must also be a multiple of 4096.

Once you have edited (or created) the file, reboot before continuing with
the installation. If you wish to check the settings currently being used by
the kernel, you can use the sysctl utility:

% sysctl -a

The database server can now be installed.

For more information on PostgreSQL's use of shared memory, please see:
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;

&lt;a href=&quot;http://www.postgresql.org/docs/current/static/kernel-resources.html#SYSVIPC&quot;&gt;http://www.postgresql.org/docs/current/static/kernel-resources.html#SYSVIPC&lt;/a&gt;

</description>
      <guid>http://support.bitrock.com/article/postgresql-cannot-allocate-memory-on-mac-os-x</guid>
    </item>
    <item>
      <title>Differentiate between Linux distributions</title>
      <link>http://support.bitrock.com/article/differentiate-between-linux-distributions</link>
      <pubDate>Wed, 14 Jul 2010 22:57:44 GMT</pubDate>
      <description>InstallBuilder has built in support for Linux distribution detection, the following variables are automatically created:

&lt;pre&gt;
${linux_distribution}
${linux_distribution_fullname}
${linux_distribution_shortname}
${linux_distribution_id}
${linux_distribution_codename}
${linux_distribution_release}
${linux_distribution_description}
&lt;/pre&gt;</description>
      <guid>http://support.bitrock.com/article/differentiate-between-linux-distributions</guid>
    </item>
    <item>
      <title>Device driver installation</title>
      <link>http://support.bitrock.com/article/device-driver-installation</link>
      <pubDate>Wed, 14 Jul 2010 16:24:30 GMT</pubDate>
      <description>Although InstallBuilder does not have any built-in functionality for driver registration on Windows, many customers have successfully used the runProgram action with the DPInst.exe tool available at &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ff553607.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/ff553607.aspx&lt;/a&gt;</description>
      <guid>http://support.bitrock.com/article/device-driver-installation</guid>
    </item>
    <item>
      <title>How can I preserve the attributes for the files with resource forks?</title>
      <link>http://support.bitrock.com/article/how-can-i-preserve-the-attributes-for-the-files-with-resource-forks</link>
      <pubDate>Fri, 11 Jun 2010 14:13:44 GMT</pubDate>
      <description>&lt;p&gt;In some cases, when building installer for OS X platforms, you may need to add the piece of code below in your xml project in order to correctly preserve the attributes for the file with resource forks.&lt;/p&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;postInstallationActionList&amp;gt;&lt;/span&gt;
 ...
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;changeOSXAttributes&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;creator&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;creator_code&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;files&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${installdir}/path/to/your/file&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;application_type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
 ...
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;/postInstallationActionList&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;p&gt;You can get the right attributes values  for creator and type using the GetFileInfo tool:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;/Developer/Tools/GetFileInfo  /path/to/your/file&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;</description>
      <guid>http://support.bitrock.com/article/how-can-i-preserve-the-attributes-for-the-files-with-resource-forks</guid>
    </item>
    <item>
      <title>How do I modify the default key names created to the ARP menu and HKEY_LOCAL_MACHINE\SOFTWARE</title>
      <link>http://support.bitrock.com/article/how-do-i-modify-the-default-key-names-created-to-the-arp-menu-and-hkey_local_machinesoftware</link>
      <pubDate>Wed, 24 Mar 2010 10:41:45 GMT</pubDate>
      <description>You can configure those keys using the tags &amp;lt;windowsSoftwareRegistryPrefix&amp;gt; and &amp;lt;windowsARPRegistryPrefix&amp;gt;:


&lt;dl&gt; 
&lt;dt&gt;- Add Remove Program Menu:&lt;/dt&gt; &lt;br /&gt;
&lt;dd&gt;The key will be created under: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\${project.windowsARPRegistryPrefix}&lt;br /&gt; The default value for &amp;lt;windowsARPRegistryPrefix&amp;gt; is &quot;${project.fullName} ${project.version}&quot;&lt;br /&gt;&lt;br /&gt;

&lt;/dd&gt; 
&lt;dt&gt;- Software key:&lt;/dt&gt; &lt;br /&gt;
&lt;dd&gt;The key will be created under: HKEY_LOCAL_MACHINE\Software\${project.windowsSoftwareRegistryPrefix}&lt;br /&gt; The default value for &amp;lt;windowsSoftwareRegistryPrefix&amp;gt; is &quot;${project.vendor}\${project.fullName}&quot;&lt;br /&gt;
&lt;/dd&gt; 
&lt;/dl&gt; 
&lt;br /&gt;&lt;br /&gt;
For example, if you want your ARP Menu key to be named &quot;My ARP key&quot; and your your software key to be &quot;My Company\My product Version 4\Component A&quot; you just have to use the below:

&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
        ...
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;windowsARPRegistryPrefix&amp;gt;&lt;/span&gt;My ARP key&lt;span class=&quot;ta&quot;&gt;&amp;lt;/windowsARPRegistryPrefix&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;windowsSoftwareRegistryPrefix&amp;gt;&lt;/span&gt;My Company\My product Version 4\Component A&lt;span class=&quot;ta&quot;&gt;&amp;lt;/windowsSoftwareRegistryPrefix&amp;gt;&lt;/span&gt;
        ...
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;

&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
      <guid>http://support.bitrock.com/article/how-do-i-modify-the-default-key-names-created-to-the-arp-menu-and-hkey_local_machinesoftware</guid>
    </item>
    <item>
      <title>How can I validate the strength of a provided password?</title>
      <link>http://support.bitrock.com/article/how-can-i-validate-the-strength-of-a-provided-password</link>
      <pubDate>Thu, 04 Mar 2010 18:30:48 GMT</pubDate>
      <description>To check if a password is strong enough for your application, you can validate it using a &lt;regExMatch&gt; rule:

&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;passwordParameter&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;password&lt;span class=&quot;ta&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;Password&lt;span class=&quot;ta&quot;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;explanation&amp;gt;&lt;/span&gt;Administrator account password&lt;span class=&quot;ta&quot;&gt;&amp;lt;/explanation&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;default&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/default&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;allowEmptyValue&amp;gt;&lt;/span&gt;1&lt;span class=&quot;ta&quot;&gt;&amp;lt;/allowEmptyValue&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;descriptionRetype&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/descriptionRetype&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;width&amp;gt;&lt;/span&gt;20&lt;span class=&quot;ta&quot;&gt;&amp;lt;/width&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;validationActionList&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;ta&quot;&gt;&amp;lt;throwError&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;The password provided is not strong enough&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;ta&quot;&gt;&amp;lt;regExMatch&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;logic&amp;gt;&lt;/span&gt;does_not_match&lt;span class=&quot;ta&quot;&gt;&amp;lt;/logic&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;pattern&amp;gt;&lt;/span&gt;^(?=(?:\D*\d){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^!@#$%^&lt;span class=&quot;en&quot;&gt;&amp;amp;amp;&lt;/span&gt;*+=]*[!@#$%^&lt;span class=&quot;en&quot;&gt;&amp;amp;amp;&lt;/span&gt;*+=]){2}).{10,}$&lt;span class=&quot;ta&quot;&gt;&amp;lt;/pattern&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;text&amp;gt;&lt;/span&gt;${password}&lt;span class=&quot;ta&quot;&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;ta&quot;&gt;&amp;lt;/regExMatch&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;ta&quot;&gt;&amp;lt;/throwError&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;/validationActionList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/passwordParameter&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

The above checks if the password includes at least 2 uppers, 2 lowers, 2 digits and 2 special characters. It also requests at least a 10 characters length. To modify the number of requested characters for each type you just have to change the numbers inside the curly brackets. For example, to request 3 special characters:&lt;br /&gt;&lt;br /&gt;
(?=(?:[^!@#$%^&amp;amp;*+=]*[!@#$%^&amp;amp;*+=]){3})&lt;br /&gt;&lt;br /&gt;
And to modify the minimum length, the last part of the pattern: .{10,}$

&lt;/regExMatch&gt;</description>
      <guid>http://support.bitrock.com/article/how-can-i-validate-the-strength-of-a-provided-password</guid>
    </item>
    <item>
      <title>How to detect the installed version of .NET framework</title>
      <link>http://support.bitrock.com/article/how-to-detect-the-installed-version-of-net-framework</link>
      <pubDate>Tue, 02 Mar 2010 21:50:21 GMT</pubDate>
      <description>To detect if the the required .NET Framework version if installed in the target system, you just have to include the code below:

&lt;br&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3.5&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- .NET 1.0 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;registryGet&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3705&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;variable&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dotNetValue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${dotNetValue}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3321-3705&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariable&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareVersions&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version1&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${required}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version2&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;less_or_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- .NET 1.1 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;registryGet&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;4322&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;variable&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dotNetValue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${dotNetValue}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3706-4322&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariable&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareVersions&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version1&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${required}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version2&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;less_or_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- .NET 2.0 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;registryGet&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;50727&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v2.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;variable&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dotNetValue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${dotNetValue}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;50727-50727&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariable&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareVersions&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version1&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${required}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version2&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;less_or_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- .NET 3.0 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;registryGet&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;InstallSuccess&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;variable&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dotNetValue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${dotNetValue}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariable&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareVersions&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version1&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${required}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version2&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;less_or_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- .NET 3.5 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;actionGroup&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;actionList&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;registryGet&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;variable&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dotNetValue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariable&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3.5&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${dotNetValue}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariable&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionList&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareVersions&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version1&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${required}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;version2&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;3.5&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;less_or_equal&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/actionGroup&amp;gt;&lt;/span&gt;

&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
Depending on the requested version, the appropriate actionGroup will be evaluated. For example, if .NET 3.0 is required, version checks from 1.0 through 2.0 will be skipped 
 (as it does not matter if the are installed).

After the code is executed, you can just throw an error if no greater version was found (version is still &quot;&quot;):
&lt;br /&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;throwError&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;This application requires .NET ${required} or greater&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;ta&quot;&gt;&amp;lt;compareText&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${version}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;logic&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/throwError&amp;gt;&lt;/span&gt;
    
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;/br&gt;</description>
      <guid>http://support.bitrock.com/article/how-to-detect-the-installed-version-of-net-framework</guid>
    </item>
    <item>
      <title>Checking files and directories with the &lt;fileTest&gt; rule</title>
      <link>http://support.bitrock.com/article/checking-files-and-directories-with-the-filetest-rule</link>
      <pubDate>Sat, 09 Jan 2010 11:28:04 GMT</pubDate>
      <description>InstallBuilder allow to check files and directories properties through the &amp;lt;fileTest&amp;gt; rule. This rule accepts the below tests:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;exists&lt;/b&gt;: Exists&lt;/li&gt;
&lt;li&gt;&lt;b&gt;not_exists&lt;/b&gt;: Does not exist&lt;/li&gt;
&lt;li&gt;&lt;b&gt;writable&lt;/b&gt;: Is writable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;not_writable&lt;/b&gt;: Is not writable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;readable&lt;/b&gt;: Is readable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;not_readable&lt;/b&gt;: Is not readable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;executable&lt;/b&gt;: Is executable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;not_executable&lt;/b&gt;: Is not executable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_directory&lt;/b&gt;: Is a directory&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_not_directory&lt;/b&gt;: Is not a directory&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_symlink&lt;/b&gt;: Is a symbolic link&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_not_symlink&lt;/b&gt;: Is not a symbolic link&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_file&lt;/b&gt;: Is a file&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_not_file&lt;/b&gt;: Is not a file&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_empty&lt;/b&gt;: Is empty&lt;/li&gt;
&lt;li&gt;&lt;b&gt;is_not_empty&lt;/b&gt;: Is not empty&lt;/li&gt;
&lt;/ul&gt;

The conditions is_empty and is_not_empty above both apply to files and directories. When used over a directory, it will check if it contains any file and if used over a file, it will check its contents (size). 

If you want to avoid false results when checking a directory (or file) you can combine it with another fileTest rule to enforce the file type:
&lt;br /&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- We don't want an empty file to return '1' --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;fileTest&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;condition&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;is_directory&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;path&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${path}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;ta&quot;&gt;&amp;lt;fileTest&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;condition&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;is_empty&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;path&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${path}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;

This will work if the &amp;lt;ruleEvaluationLogic&amp;gt; is 'and', if you need it to be 'or' to create a more complex rule, you can use a ruleGroup:

&lt;br /&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;showInfo&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;text&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Is Windows or directory ${path} is empty&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleEvaluationLogic&amp;gt;&lt;/span&gt;or&lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleEvaluationLogic&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- This ruleGroup is equivalent to a is_directory_and_empty test --&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleGroup&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;ruleList&amp;gt;&lt;/span&gt;
         &lt;span class=&quot;ta&quot;&gt;&amp;lt;fileTest&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;condition&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;is_directory&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;path&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${path}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class=&quot;ta&quot;&gt;&amp;lt;fileTest&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;condition&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;is_empty&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;path&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${path}&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleGroup&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;ta&quot;&gt;&amp;lt;/ruleList&amp;gt;&lt;/span&gt;
&lt;span class=&quot;ta&quot;&gt;&amp;lt;/showInfo&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
      <guid>http://support.bitrock.com/article/checking-files-and-directories-with-the-filetest-rule</guid>
    </item>
    <item>
      <title>Unicode and Byte Order Mark (BOM) </title>
      <link>http://support.bitrock.com/article/unicode-and-byte-order-mark-bom</link>
      <pubDate>Thu, 07 Jan 2010 10:52:47 GMT</pubDate>
      <description>Certain Unicode-encoded files (typically those created by Windows utilities) will include a &lt;a href=&quot;http://unicode.org/faq/utf_bom.html#BOM&quot;&gt;BOM&lt;/a&gt;. If you read the contents of such a file and need to remove it, you can do as follows:
&lt;br&gt;
&lt;table border=&quot;0&quot; bgcolor=&quot;fffaf0&quot;&gt;&lt;tbody&gt;&lt;tr border=&quot;0&quot;&gt;&lt;td border=&quot;0&quot;&gt;&lt;pre&gt;
            &lt;span class=&quot;ta&quot;&gt;&amp;lt;readFile&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;encoding&amp;gt;&lt;/span&gt;unicode&lt;span class=&quot;ta&quot;&gt;&amp;lt;/encoding&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;text&lt;span class=&quot;ta&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;path&amp;gt;&lt;/span&gt;/path/to/file.txt&lt;span class=&quot;ta&quot;&gt;&amp;lt;/path&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;/readFile&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;setInstallerVariableFromRegEx&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;text&lt;span class=&quot;ta&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;pattern&amp;gt;&lt;/span&gt;\uFEFF&lt;span class=&quot;ta&quot;&gt;&amp;lt;/pattern&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;substitution&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/substitution&amp;gt;&lt;/span&gt;
                 &lt;span class=&quot;ta&quot;&gt;&amp;lt;text&amp;gt;&lt;/span&gt;${text}&lt;span class=&quot;ta&quot;&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
             &lt;span class=&quot;ta&quot;&gt;&amp;lt;/setInstallerVariableFromRegEx&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/br&gt;</description>
      <guid>http://support.bitrock.com/article/unicode-and-byte-order-mark-bom</guid>
    </item>
  </channel>
</rss>
