Как определить Windows 32-битные или 64-битные с помощью сценария NSIS?

Я написал сценарий nsis для проекта Java. У меня есть Batch-файл в моем проекте. Я написал Batch-файл для Windows 32 и 64-битных. Обычно после установки я запускаю Batch-файл автоматически, используяExec Это нормально работает в 32-битной Windows. Но в 64-битной версии это работает не очень хорошо. Поэтому я подозреваю, что перед установкой я должен проверить, 32-битная или 64-битная версия Windows.

 nawfal23 июл. 2013 г., 10:57

Ответы на вопрос(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 как я верю в этоволосы быстрее. Лол. Надеюсь это поможет! знак равно

Включить это:

!include x64.nsh

И используйте это, если:

${If} ${RunningX64}
    # 64 bit code
${Else}
    # 32 bit code
${EndIf}       
 Jon Weinraub29 окт. 2014 г., 19:47
Это обнаруживает все 64-разрядные архитектуры или только Windows XP x64?
 Anders19 нояб. 2014 г., 17:03
Это относится ко всем 64-битным версиям Windows. (Он вызывает IsWow64Process внутри)
 Nitay30 окт. 2014 г., 19:48
Я не могне могу найти определенный ответ, я всегда предполагал, что это так! Я'Мы проверили его на 64-битной Windows 7 и 64-битной Windows XP, и это сработало. У меня никогда не было проблем с этим на любой платформе Windows
Решение Вопроса

Используйте макрос RunningX64 вx64.nsh заголовок:

!include LogicLib.nsh
!include x64.nsh

Section
${If} ${RunningX64}
    DetailPrint "64-bit Windows"
${Else}
    DetailPrint "32-bit Windows"
${EndIf}  
SectionEnd
 Ami06 нояб. 2012 г., 04:45
Спасибо. В этом URL сказано; Файл some.dll # извлекается в C: \ Windows \ System32. что такое some.dll? какой файл это значит? я не мог понять
 Ami07 нояб. 2012 г., 05:36
спасибо, Андерс. Я использовал {Если} и работает нормально.
 Anders06 нояб. 2012 г., 06:06
Это всего лишь пример кода, строка {If} является важной частью ...
 Ami06 нояб. 2012 г., 06:21
о спасибо. что {если} часть, где я помещен в мой сценарий? .oninit ()? или какое-то другое место?

Ваш ответ на вопрос