November 1st, 2007

Windows Installer Properties and Conditions

Heath Stewart
Principal Software Engineer

In many languages, some variables can take a value of different types but with the same meaning. Variants in script, for example, can take 0 or false; or they can take any non-zero value and true. The following JScript example prints “Same”.

if (0 == false) WScript.Echo("Same");

The same is not true of Windows Installer however, and conditions must acknowledge this. Setting a property to 0 does not undefine it nor does it mean a simple property test will fail as shown in the following example condition.

ARPSYSTEMCOMPONENT AND KB123456.PatchCode

If a product defined or a user passed in ARPSYSTEMCOMPONENT=0, the condition above will still pass because ARPSYSTEMCOMPONENT is defined as 0. Setting the value to “false” will also satisfy the condition because “false” is just a string – quoted or not.

If a property is defined to support certain values, conditions must check the properties against those values. In the particular case of ARPSYSTEMCOMPONENT, setting this to any value will result in the default provided ARP being ignored but any value other than 1 is considered to cause undefined behavior. The example condition should be rewritten as follows.

ARPSYSTEMCOMPONENT=1 AND KB123456.PatchCode

If a Windows Installer property is set to any value it is defined. There are no booleans, so setting a property to 0 or false will satisfy any condition that merely checks if the property is defined.

Author

Heath Stewart
Principal Software Engineer

Heath is an application architect and developer, looking to help educate others to learn professional development. Besides designing and developing applications he enjoys writing about intermediate and advanced topics. Heath also consults for deployment packages and scenarios within Microsoft and for external customers.

0 comments

Discussion are closed.

Feedback