2010-03-16 15 views
17

पर चलने से 32-बिट इंस्टॉलर को रोकें उपयोगकर्ता भ्रम के कारण, हमारे ऐप को 32-बिट और 64-बिट संस्करणों के लिए अलग-अलग इंस्टॉलर की आवश्यकता होती है। जबकि 32-बिट इंस्टॉलर Win64 पर ठीक चलता है, इसमें समर्थन सिरदर्द बनाने की क्षमता है और हम इसे होने से रोकना चाहते हैं।वाईएक्स: 64-बिट विंडोज

मैं 32-बिट एमएसआई इंस्टॉलर को 64-बिट विंडोज मशीनों पर चलने से रोकना चाहता हूं।

<Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows."> 
    <![CDATA[Msix64 AND (NOT Win64)]]> 
</Condition> 
Win64 इस तरह परिभाषित किया गया साथ

:

<?if $(var.Platform) = "x64"?> 
<?define PlatformString = "64-bit"?> 
<?define Win64 ?> 
<?else?> 
<?define PlatformString = "32-bit"?> 
<?endif?> 

बात है, मैं इस चेक सही काम करने के लिए नहीं मिल सकता है कि अंत करने के लिए मैं निम्नलिखित शर्त है। या तो यह हर समय, या किसी भी समय आग लगती है। लक्ष्य संकलन-समय Win64 चर के विरुद्ध रन-टाइम msix64 परिवर्तनीय की उपस्थिति की जांच करना है और यदि यह लाइन नहीं है तो कोई त्रुटि फेंक दें, लेकिन तर्क काम नहीं कर रहा है कि मैं इसका इरादा कैसे रखता हूं। क्या कोई बेहतर समाधान के साथ आया है?

उत्तर

15

केवल अपने 32-बिट पैकेज में हालत तत्व शामिल करें (यानी, उपयोग कर रहे हैं? अगर? प्रीप्रोसेसर स्टेटमेंट)। शर्त "नहीं Msix64" होगी: लॉन्च स्थितियां ऐसी चीजें हैं जो सत्य होने चाहिए, इसलिए यदि Msix64 सेट है, तो लॉन्च स्थिति विफल हो जाएगी और इसका मतलब है कि यह एक x64 ओएस और 32-बिट पैकेज है और करने के लिए सही काम है ब्लॉक।

+0

यह चाल चल रहा है। मेरी गलती 'हालत' के लिए तर्क को पीछे की ओर ले रही थी। –

+1

Msix64 को Windows इंस्टालर 3.1 की आवश्यकता है जो डिफ़ॉल्ट रूप से XP पर मौजूद नहीं है (देखें http://msdn.microsoft.com/en-us/library/aa370522(v=VS.85).aspx) –

3

स्थिति तत्व विंडोज इंस्टालर गुणों के साथ काम करता है, जो एक स्थापना के दौरान मौजूद है।

हालांकि, आप एक Win64 को एक विक्स वैरिएबल के रूप में परिभाषित कर रहे हैं, विंडोज़ इंस्टॉलर प्रॉपर्टी नहीं। सेटअप बनाते समय Wix चर केवल मौजूद हैं। आपको उन्हें $(var.MyWixVariable) के रूप में संदर्भित करना होगा जहां आप उनका उपयोग करते हैं, और विक्स प्रीप्रोसेसर उन्हें उनके निर्धारित मूल्य के साथ बदल देगा।

मैं इस बजाय कोशिश करेंगे:

<?if $(var.Platform) = "x64"?> 
<?define PlatformString = "64-bit"?> 
<Property Id="Win64" Value="1" /> 
<?else?> 
<?define PlatformString = "32-bit"?> 
<?endif?> 

तो $(var.Platform) सही मूल्य सेटअप बनाई गई है है, तो यह एक "Win64" संपत्ति (Windows इंस्टालर डेटाबेस में दर्ज किया जा एमएसआई यानी कारण होगा फ़ाइल) और संपत्ति एक शर्त तत्व में उपयोग के लिए स्थापना के दौरान उपलब्ध होगी।

+0

यह एक त्रुटि फेंकता है जब यह दर्शाता है कि नेस्टेड संपत्ति तत्व वाक्य रचना के साथ नहीं रखा जा सकता Wix 3.6 पर प्रकाश के माध्यम से चलाते हैं। – Jon

+0

@ जोनसमवेल: ये प्रसंस्करण निर्देश ('') का उद्देश्य candle.exe में प्रीप्रोसेसर के लिए है। यदि आप Wix का सही उपयोग कर रहे हैं तो Light.exe उन्हें कभी नहीं देखना चाहिए। –

3

इस हालत

<Condition Message="This is designed for 32bit OS">%PROCESSOR_ARCHITECTURE ~= "x86" AND %PROCESSOR_ARCHITEW6432 &lt;&gt; "amd64"></Condition> 

आप एक 32bit घटक और एक 64 बिट घटक के साथ एक संस्थापक बना सकते हैं जोड़ें और संबंधित घटकों

<Component Id="bit32Component" Guid="..." Feature="ProductFeature"> 
    <Condition>%PROCESSOR_ARCHITECTURE~="x86" AND %PROCESSOR_ARCHITEW6432&lt;&gt;"amd64"></Condition> 
</Component> 
<Component Id="bit64Component" Guid="..." Feature="ProductFeature"> 
    <Condition>%PROCESSOR_ARCHITECTURE~="amd64" OR %PROCESSOR_ARCHITEW6432~="amd64"></Condition> 
</Component> 

यहाँ इन दोनों की स्थिति में डाल दिया एक संदर्भ मैं

प्रयोग किया जाता है

http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx

6

हम निम्नलिखित का उपयोग करें ...

<?if $(var.ProcessorArchitecture)=x86 ?> 
<Condition Message="!(loc.LaunchCondition_Error64)"> 
    <![CDATA[Installed OR Not VersionNT64]]> 
</Condition> 
<?endif?> 
+1

संस्करणNT64 को Windows इंस्टालर 4.0 की आवश्यकता है (http://msdn.microsoft.com/en-us/library/windows/desktop/aa372497.aspx देखें) –