【问题标题】:NSIS installer access engine check if installedNSIS 安装程序访问引擎检查是否已安装
【发布时间】:2018-08-18 11:59:44
【问题描述】:

我正在使用 NSIS 安装程序,作为我设置的一部分,我需要安装 Access 数据库引擎。这部分我正在工作。

我似乎无法弄清楚如何检查是否已经安装了 Access 数据库引擎(32 位或 64 位) - 我不知道 NSIS 是否可以做到这一点?有人知道吗?

Access 数据库引擎的 NSIS 脚本当前执行以下操作:-

${If} ${RunningX64}
        HideWindow
        File "access64.exe"
        ExecWait "$INSTDIR\access64.exe"
        BringToFront
${Else}
        HideWindow
        File "access32.exe"
        ExecWait "$INSTDIR\access32.exe"
        BringToFront
${EndIf}

【问题讨论】:

  • 您可以使用FileExists 来检查是否还安装了access32.exeaccess64.exe。或者是否有来自访问数据库引擎的注册表项?然后检查是否有。

标签: ms-access installation nsis


【解决方案1】:

NSIS 可以检查某些文件和/或注册表值是否存在。

关于访问检测already on Stackoverflow 有很多问题,你应该看看那些,看看你应该查询哪些注册表项。查找哪个键实际上取决于您是否关心特定版本,或者是否可以接受任何版本的 Access。

您还可以向 Windows shell 询问 Access ProgId:

!include LogicLib.nsh
Section

System::Call 'SHLWAPI::AssocQueryString(i0x00000540,i4,t"Access.Application",p0,t.r1,*i${NSIS_MAX_STRLEN})i.r0'
${If} $0 = 0
    DetailPrint "Registered application friendly name: $1"
${EndIf}
System::Call 'SHLWAPI::AssocQueryString(i0x00000540,i2,t"Access.Application",p0,t.r1,*i${NSIS_MAX_STRLEN})i.r0'
${If} $0 = 0
    DetailPrint "EXE: $1"
    ; Call GetDLLVersion etc. if needed
${EndIf} 

SectionEnd

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2010-11-29
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多