Search code examples
windowswindows-installerinstallshield

Windows Installshield condition is not getting triggered


Our product installer is written in installshield. I am working on to make a simple installer change, that will check a registry value, and if that value is set to 1, it will throw back an error message and abort installation.

<table name="AppSearch">
        <col key="yes" def="s72">Property</col>
        <col key="yes" def="s72">Signature_</col>           
        <row><td>SecureLayerEnabled</td><td>securelayerEnabled</td></row>

    <table name="RegLocator">
    <col key="yes" def="s72">Signature_</col>
    <col def="i2">Root</col>
    <col def="s255">Key</col>
    <col def="S255">Name</col>
    <col def="I2">Type</col>        
    <row><td>securelayerEnabled</td><td>2</td><td>SYSTEM\CurrentControlSet\Control\SecureLayer\State</td><td>Version</td><td>2</td></row>

And below is the condition defined in InstallExecuteSequence--

<row><td>VM_ErrNoSecureBoot</td><td>Not Installed And (SecureLayerEnabled="1")</td><td>401</td><td/><td/></row>

I have checked that in the machine, the value SYSTEM\CurrentControlSet\Control\SecureLayer\State--> Version is set to 1. However, the installer does-not fire this check. Interesting thing is that the Version is of type REG_DWORD. However, if I change the type of Version to REG_SZ, the condition fires successfully. But I need to make it work when Version is of type REG_DWORD. I tried to remove the "" in the condition like below --

Not Installed And (SecureLayerEnabled=1)

But even this does-not work. Any help on how to make it work when Version is of type REG_DWORD will be appreciated


Solution

  • When using REG_DWORD type, Installshield generally prefix it with '#' to distinguish it from other types. Try the following condition:

    Not Installed And (SecureLayerEnabled=#1)