Windows Installshield 条件未被触发

Windows Installshield condition is not getting triggered

我们的产品安装程序是用 installshield 编写的。我正在努力做一个简单的安装程序更改,它将检查注册表值,如果该值设置为 1,它将返回一条错误消息并中止安装。

<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>

下面是 InstallExecuteSequence 中定义的条件 --

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

我已经检查过机器中的值 SYSTEM\CurrentControlSet\Control\SecureLayer\State--> 版本设置为 1。但是,安装程序不会触发此检查。有趣的是 Version 的类型是 REG_DWORD。但是,如果我将版本类型更改为 REG_SZ,则条件会成功触发。但是当 Version 类型为 REG_DWORD 时,我需要让它工作。我试图在如下情况下删除 "" --

Not Installed And (SecureLayerEnabled=1)

但即使这样也行不通。任何有关如何在 Version 类型为 REG_DWORD 时使其工作的帮助将不胜感激

您首先需要启用安装日志。它可能会指出为什么会这样。您可以使用 /l*V 或 enable it on the system before running the installer.

使用REG_DWORD类型时,Installshield一般会在其前面加上'#'以区别于其他类型。尝试以下条件:

未安装并且 (SecureLayerEnabled=#1)