我们的产品安装程序是使用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类型时如何使它工作的任何帮助将受到赞赏
答案 0 :(得分:2)
首先,您需要启用安装日志记录。它可能会指出您为什么这种行为方式。您可以使用/ l * V或enable it on the system before running the installer。
答案 1 :(得分:2)
在使用REG_DWORD类型时,Installshield通常以'#'作为前缀,以区别于其他类型。尝试以下条件:
未安装且(SecureLayerEnabled =#1)