Windows Installshield条件未触发

时间:2019-07-15 11:20:05

标签: windows windows-installer installshield

我们的产品安装程序是使用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。但是,安装程序不会触发此检查。有趣的是,版本的类型为REG_DWORD。但是,如果我将Version的类型更改为REG_SZ,则条件将成功触发。但是当Version的类型为REG_DWORD时,我需要使其工作。我试图在如下情况下删除“”-

Not Installed And (SecureLayerEnabled=1)

但是即使这样也不行。在版本为REG_DWORD类型时如何使它工作的任何帮助将受到赞赏

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

在使用REG_DWORD类型时,Installshield通常以'#'作为前缀,以区别于其他类型。尝试以下条件:

未安装且(SecureLayerEnabled =#1)