为什么NSIS检查JRE是否破损?

时间:2010-10-22 18:44:55

标签: nsis

为什么这个脚本会在不需要时尝试安装jre?我确认C:\Windows\System32\java.exe确实存在,但是这个脚本没有看到它。该脚本的目标是XP,Vista,32位和64位。脚本!包括x64.nsh。第一个ElseIf的原因是javaw.exe有时安装在64位系统上的C:\Windows\System32\中。逻辑是假的吗?如果是这样,怎么样?是C:\Windows\System32\javaw.exe使用不当吗?

${If} ${FileExists} `$SYSDIR\javaw.exe`
    ; Skip JRE install
${ElseIf} ${FileExists} `C:\Windows\System32\javaw.exe`
    ; Skip JRE install
${ElseIf} ${RunningX64}
    ExecWait '"jre-6u22-windows-x64.exe"'
${Else}
    ExecWait '"jre-6u22-windows-i586-s.exe"'
${EndIf}

1 个答案:

答案 0 :(得分:1)

需要除非block和DisableX64FSRedirection。

${If} ${RunningX64} 
    ${DisableX64FSRedirection} 
    ${Unless} ${FileExists} "$SYSDIR\javaw.exe" 
        ExecWait '"jre-6u22-windows-x64.exe"'
    ${EndUnless} 
    ${EnableX64FSRedirection} 
${Else}  
    ${Unless} ${FileExists} "$SYSDIR\javaw.exe" 
        ExecWait '"jre-6u22-windows-i586-s.exe"'
    ${EndUnless} 
${EndIf}