2011-08-11 11 views
7

पर 64-बिट इंस्टॉलर का उपयोग यह सुनिश्चित करने के लिए लॉन्च की स्थिति लॉन्च की गई है कि मेरी लॉन्च स्थिति के साथ क्या हो रहा है? यह x86 इंस्टॉलर को 64-बिट सिस्टम पर चलने से रोकना है, लेकिन ऐसा कोई प्रभाव नहीं पड़ता है।64-बिट सिस्टम

<!-- Launch Condition to check that x64 installer is used on x64 systems --> 
<Condition Message="64-bit operating system was detected, please use the 64-bit installer."> 
    <![CDATA[VersionNT64 AND ($(var.Win64) = "no")]]> 
</Condition> 

var.Win64 इस तरह MSBuild चर से प्राप्त होता है:

<!-- Define platform-specific names and locations --> 
    <?if $(var.Platform) = x64 ?> 
    <?define ProductName = "$(var.InstallName) (x64)" ?> 
    <?define Win64 = "yes" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> 
    <?define PlatformCommonFilesFolder = "CommonFiles64Folder" ?> 
    <?else ?> 
    <?define ProductName = "$(var.InstallName) (x86)" ?> 
    <?define Win64 = "no" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> 
    <?define PlatformCommonFilesFolder = "CommonFilesFolder" ?> 
    <?endif ?> 

मैं अपने समस्या को हल करना चाहते हैं, लेकिन मैं यह भी इस प्रकार की समस्या के निवारण के लिए रणनीति के बारे में सुनने के लिए दिलचस्पी होगी।

उत्तर

7

LaunchCondition table परिभाषा के अनुसार:

अभिव्यक्ति है कि स्थापना आरंभ करने के लिए सही पर मूल्यांकन करना चाहिए।

आपकी स्थिति में 2 भाग होते हैं: पहला इंस्टॉल समय पर मूल्यांकन करता है, दूसरा निर्माण समय पर मूल्यांकन करता है। इसलिए, x86 पैकेज के लिए स्थिति का दूसरा भाग बिल्ड समय पर "नहीं" = "नहीं" का मूल्यांकन करेगा, जो स्पष्ट रूप से इंस्टॉल समय पर सही देता है। और पहला भाग - VersionNT64 - x64 मशीनों पर परिभाषित (और इस प्रकार, सही) है। यही कारण है कि पूरी हालत सच है और स्थापना शुरू होती है।

आप इस प्रकार अपनी हालत पुनर्लेखन कर सकते हैं:

<Condition Message="64-bit operating system was detected, please use the 64-bit installer."> 
    <?if $(var.Win64) = "yes" ?> 
    VersionNT64 
    <?else?> 
    NOT VersionNT64 
    <?endif?> 
</Condition> 

इसलिए, 64-बिट पैकेज में हालत अभी VersionNT64 हो जाएगा, और गुजरती हैं और स्थापित शुरू कर देंगे। फॉर्म x86 पैकेज स्थिति NOT VersionNT64 होगी, जो स्पष्ट रूप से 64-बिट पर असफल हो जाएगी, लेकिन 32-बिट पर शुरू होगी।

+1

ध्यान दें कि 32-बिट सिस्टम को 32-बिट सिस्टम पर बंद होने से पहले लॉन्च कैंडिशन नहीं मिलेगा। तो उस मामले के लिए संदेश को बेहतर बनाने की ज़रूरत नहीं है। –

+0

सही! संकेत के लिए धन्यवाद, माइकल! मैं अपना जवाब अपडेट करूंगा ... –

+0

@ यान, उत्तर के लिए धन्यवाद। मुझे पूरी तरह से यकीन है कि मैं आपको सही ढंग से समझता हूं, मुझे लगता है कि आप क्या कह रहे हैं कि मैंने अभी अपनी हालत में एक साधारण तर्क त्रुटि बनाई है। अब जब मैं इसे देखता हूं, मुझे लगता है कि मैं अपनी गलती देखता हूं। साथ ही साथ आपका पुनः लिखित संस्करण, क्या मैं यह सोचने में सही होगा कि "नहीं" को "हां" में बदलना भी समस्या को ठीक करेगा? तो, मुझे इसके साथ छोड़ा जाएगा: 'संस्करणNT64 और ($ (var.Win64) =" yes ")' –

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