2012-11-05 6 views
26

मैंने जावा प्रोजेक्ट के लिए एनएसआईएस स्क्रिप्ट लिखी है। मेरे पास प्रोजेक्ट में बैच फ़ाइल है। मैंने आमतौर पर विंडोज 32 बिट और 64 बिट के लिए बैच फ़ाइल लिखी है। स्थापित करने के बाद मैंने एक्सेक कमांड का उपयोग करके स्वचालित रूप से बैच फ़ाइल शुरू कर दी है। यह ठीक है 32 बिट विंडोज़। लेकिन साथ ही यह 64 बिट में अच्छी तरह से काम नहीं किया गया है। इसलिए मुझे संदेह है कि इंस्टॉल करने से पहले मुझे यह जांचना चाहिए कि विंडोज 32 बिट या 64 बिट संस्करण है या नहीं। कृपया अपने विचारों को कैसे जांचें?एनएसआईएस स्क्रिप्ट का उपयोग कर विंडोज 32 बिट या 64 बिट का पता लगाने के लिए कैसे?

+0

डुप्लिकेट प्रश्न के रूप में नहीं कहा जाता है, लेकिन यह वही है: [उपयोग-एक-एनएसआईएस-इंस्टॉलर-टू-इंस्टाल -32-बिट-बाइनरी-ऑन -32-बिट-ओएस-एंड -64-बिट- बिनारी] (http://stackoverflow.com/questions/11126629/use-one-nsis-installer-to-install-32-bit-binaries-on-32-bit-os-and-64-bit-binari) – nawfal

उत्तर

25

x64.nsh शीर्षक में RunningX64 मैक्रो का उपयोग करें:

!include LogicLib.nsh 
!include x64.nsh 

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

धन्यवाद। उस यूआरएल में कहा; कुछ डीएल # फाइल को सी: \ विंडोज \ System32 पर फ़ाइल करें। some.dll क्या है? किस फाइल का मतलब है? मैं – Ami

+0

समझने में सक्षम नहीं था, यह केवल कुछ उदाहरण कोड है, {if} लाइन महत्वपूर्ण हिस्सा है ... – Anders

+1

ओह धन्यवाद। यह {अगर} भाग मैं अपनी स्क्रिप्ट में कहां डालूं? .oninit()? या कुछ और जगह? – Ami

58

भविष्य आलसी Googler के लिए - एक छोटा-सा स्निपेट:

इस को शामिल करें:

!include x64.nsh 

और इस का उपयोग करते हैं:

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

क्या यह सभी 64-बिट आर्किटेक्चर या सिर्फ विंडोज एक्सपी x64 का पता लगाता है? –

+0

मुझे एक निश्चित उत्तर नहीं मिला, मैंने हमेशा यह माना कि यह करता है! मैंने इसे विंडोज 7 64 बिट और विंडोज एक्सपी 64 बिट पर परीक्षण किया है और यह काम करता है। मुझे किसी भी विंडोज प्लेटफार्म – Nitay

+0

पर इसके साथ कभी भी कोई परेशानी नहीं थी यह विंडोज के सभी 64-बिट संस्करणों पर लागू होता है। (यह आंतरिक रूप से IsWow64Process कहते हैं) – Anders

-1

यहाँ है कि मैं क्या 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 

अब $ बिट रखती है की आवश्यकता के बिना समय के सबसे अधिक उपयोग करते हैं, या तो 64 या 32 जो इस तरह इस्तेमाल किया जा सकता:

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

या

StrCmpS $Bit 64 SixtyFour ThirtyTwo 

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

मैंने StrCmpS का उपयोग किया क्योंकि मुझे लगता है कि यह एक बाल तेज है। जबरदस्त हंसी। उम्मीद है की यह मदद करेगा! =)

संबंधित मुद्दे