2012-11-05 35 views
26

Tôi đã viết kịch bản nsis cho dự án java.I có tệp Batch trong project.I của tôi đã ghi tập tin batch cho các cửa sổ thông thường 32 bit và 64 bit.Sau khi cài đặt tôi đã bắt đầu tập tin batch tự động bằng cách sử dụng Exec lệnh.Its woks fine in 32 bit windows.but cùng một lúc này không phải là làm việc tốt trong 64 bit.so tôi nghi ngờ rằng trước khi cài đặt tôi nên kiểm tra xem các cửa sổ là 32 bit hoặc 64 bit version.please chia sẻ quan điểm của bạn làm thế nào để kiểm tra?Làm cách nào để phát hiện các cửa sổ 32 bit hoặc 64 bit khi sử dụng tập lệnh NSIS?

+0

Không được diễn giải là câu hỏi trùng lặp, nhưng cũng giống như vậy: [sử dụng-một-nsis-installer-to-install-32-bit-binaries-on-32-bit-os-and-64-bit- binari] (http://stackoverflow.com/questions/11126629/use-one-nsis-installer-to-install-32-bit-binaries-on-32-bit-os-and-64-bit-binari) – nawfal

Trả lời

25

Sử dụng vĩ mô RunningX64 trong x64.nsh tiêu đề:

!include LogicLib.nsh 
!include x64.nsh 

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

Thanks.In url đó nói; Giải nén tập tin some.dll # vào C: \ Windows \ System32. some.dll là gì? nó có nghĩa là gì ?. tôi không thể hiểu được – Ami

+0

Đó chỉ là một số mã ví dụ, dòng {If} là phần quan trọng ... – Anders

+1

oh thanks.that {if} phần mà tôi đặt trong kịch bản của tôi? .oninit()? hoặc một số nơi khác? – Ami

58

Đối với nhân viên của Google lười biếng trong tương lai - Một đoạn nhỏ:

Bao gồm này:

!include x64.nsh 

Và sử dụng này nếu:

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

Tính năng này có phát hiện tất cả kiến ​​trúc 64 bit hay chỉ Windows xp x64 không? –

+0

Tôi không thể tìm thấy một câu trả lời rõ ràng, tôi luôn luôn giả định nó! Tôi đã thử nghiệm nó trên Windows 7 64bit và Windows XP 64 bit và nó đã làm việc. Tôi chưa bao giờ gặp sự cố với bất kỳ nền tảng Windows nào – Nitay

+0

Ứng dụng này áp dụng cho tất cả các phiên bản Windows 64 bit. (Nó gọi IsWow64Process trong nội bộ) – Anders

-1

Đây là những gì tôi sử dụng hầu hết thời gian mà không cần 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 

Bây giờ $ Bit giữ hoặc 64 hoặc 32 có thể được sử dụng như thế này:

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

Hoặc

StrCmpS $Bit 64 SixtyFour ThirtyTwo 

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

Tôi đã sử dụng StrCmpS vì tôi tin rằng đó là tóc nhanh hơn. Lol. Hi vọng điêu nay co ich! =)

Các vấn đề liên quan