【问题标题】:How to detect windows 32bit or 64 bit using NSIS script?如何使用 NSIS 脚本检测 Windows 32 位或 64 位?
【发布时间】:2012-10-25 02:49:49
【问题描述】:

我已经为 java 项目编写了 nsis 脚本。我的项目中有批处理文件。我已经为常见的 windows 32 位和 64 位编写了批处理文件。安装后我已经使用 Exec 自动启动批处理文件命令。它在 32 位 Windows 中可以正常工作。但同时这在 64 位中效果不佳。所以我怀疑在安装之前我应该​​检查 Windows 是 32 位还是 64 位版本。请分享您的看法如何检查?

【问题讨论】:

标签: nsis


【解决方案1】:

对于未来懒惰的谷歌用户 - 一个小 sn-p:

包括这个:

!include x64.nsh

并在以下情况下使用它:

${If} ${RunningX64}
    # 64 bit code
${Else}
    # 32 bit code
${EndIf}       

【讨论】:

  • 这是检测所有 64 位架构还是仅检测 windows xp x64?
  • 我找不到明确的答案,我一直认为是这样!我已经在 Windows 7 64 位和 Windows XP 64 位上对其进行了测试,并且可以正常工作。我在任何 Windows 平台上都没有遇到过任何问题
  • 它适用于所有 64 位版本的 Windows。 (它在内部调用 IsWow64Process)
【解决方案2】:

x64.nsh 标头中使用 RunningX64 宏:

!include LogicLib.nsh
!include x64.nsh

Section
${If} ${RunningX64}
    DetailPrint "64-bit Windows"
${Else}
    DetailPrint "32-bit Windows"
${EndIf}  
SectionEnd

【讨论】:

  • 谢谢。在那个网址里说;文件 some.dll # 解压到 C:\Windows\System32。什么是some.dll?它意味着哪个文件?我无法理解
  • 哦,谢谢。那{If}部分我在我的脚本中放在哪里? .oninit()?还是其他地方?
【解决方案3】:

这是我大部分时间使用的,不需要 x64.nsh

Var Bit
System::Call "kernel32::GetCurrentProcess()i.s"
System::Call "kernel32::IsWow64Process(is,*i.r0)"
StrCmpS $0 0 +3
StrCpy $Bit 64
Goto +2
StrCpy $Bit 32

现在 $Bit 保存 64 或 32,可以这样使用:

${If} $Bit == 64
     ...64-bit code..
${Else}
     ..32-bit code...
${EndIf}

或者

StrCmpS $Bit 64 SixtyFour ThirtyTwo

SixtyFour:
    ...
    Goto End
ThirtyTwo:
    ...
End:

我使用了StrCmpS,因为我相信它的速度更快。哈哈。希望这可以帮助! =)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 2011-12-15
    • 2017-08-04
    • 2012-10-26
    • 2010-12-17
    • 2019-01-07
    • 2010-10-10
    相关资源
    最近更新 更多