2011-08-16 20 views
6

मैं एक .net आवेदन मिल गया है करने के लिए परिवर्तित करने, .net आवेदन 32 बिट 64 बिट

  • कक्षा पुस्तकालय
  • Winform आवेदन (लक्ष्य मंच किसी भी करने के लिए सेट (लक्ष्य प्लेटफार्म के लिए कोई भी सीपीयू सेट) सीपीयू)
  • इंस्टालर)
(लक्ष्य प्लेटफार्म करने के लिए सेट x86 और पता लगाया गया निर्भरता .NET फ्रेमवर्क (x86 के लिए सेट)

अब जब मैं 64-बिट मशीन पर setup.exe के माध्यम से इस एप्लिकेशन को स्थापित करता हूं, तो यह प्रोग्राम फ़ाइलों [x86] फ़ोल्डर में स्थापित होता है; मुझे लगता है कि 64-बिट अनुप्रयोग पर 32-बिट वातावरण को अनुकरण करने की WoW64 सुविधा है।

अब जब कोई क्लाइंट इसे 64-बिट में परिवर्तित करने के लिए कहता है, तो 32-बिट संस्करण स्वयं WoW64 के माध्यम से ठीक काम करता है तो उससे कोई फर्क क्यों पड़ता है? इसे प्रदर्शन लाभ में 64 बिट परिणाम में परिवर्तित कर देगा?

और जब मैं, यानी,

  • कक्षा लाइब्रेरी (64 करने के लिए परिवर्तन लक्ष्य मंच) (क्या होगा यदि मैं इस कदम को छोड़ यह 64-बिट के लिए बदलने की कोशिश मैं सभी के लिए इसे बदलने के लिए की जरूरत है,?)
  • Winform आवेदन 64 (परिवर्तन लक्ष्य मंच) (क्या होगा यदि मैं यह भी छोड़?)
  • इंस्टालर 64 (परिवर्तन लक्ष्य मंच) [का पता लगाया गया निर्भरता सूची किसी भी .NET फ़्रेमवर्क 64 विकल्प दिखाई नहीं देता है, क्यों? ]

कृपया सुझाव दे।

उत्तर

7

कोई रूपांतरण आवश्यक नहीं है, आपका ऐप पहले ही 64-बिट प्रक्रिया के रूप में चलता है। क्योंकि आपने EXE प्रोजेक्ट पर AnyCPU का उपयोग किया था। आपने इसे गलत फ़ोल्डर में स्थापित किया है, लेकिन इससे कोई फर्क नहीं पड़ता कि कोई अन्य प्रक्रिया प्रोग्रामेटिक रूप से शुरू करने का प्रयास नहीं करती है। यह बहुत दुर्लभ है।

इसे TaskMgr.exe, प्रक्रिया टैब से सत्यापित करें। इसकी प्रक्रिया के नाम के बाद 32-बिट प्रक्रिया में 32 * है।

सेटअप प्रोजेक्ट की TargetPlatform सेटिंग को x64 में बदलकर अपने क्लाइंट को खुश करें ताकि यह c: \ प्रोग्राम फ़ाइलों में स्थापित हो। आपको कुछ मिनट लेता है।

+0

के लिए मुझे क्या करना चाहिए हां, मुझे लगता है कि प्रक्रिया नाम में कोई * 32 नहीं है, भले ही लक्ष्य प्लेटफ़ॉर्म anycpu है। लेकिन यह कैसे है कि .NET Framework 2.0 (x86) की आवश्यकता है और फिर भी यह 64 बिट के रूप में चल रहा है। – EagerToLearn

+0

ऐसा इसलिए है क्योंकि आपकी मशीन पर .NET 2.0 के लिए इंस्टॉलर केवल x86 संस्करण स्थापित कर सकता है। इसके बजाय .NET 3.5 SP1 का चयन करना सुनिश्चित करें, यह एक बहुत छोटा इंस्टॉलर बनाता है। यदि आवश्यक हो, तो यह .NET डाउनलोड करने के लिए इंटरनेट का उपयोग करता है। विंडोज के 64-बिट संस्करण में पहले से ही .NET प्री-इंस्टॉल बीटीडब्ल्यू है, इसलिए निर्भरता को अनदेखा करना भी ठीक है।और कारण कोई x64 इंस्टॉलर उपलब्ध नहीं है। –

+0

बहुत स्पष्ट, सटीक और सटीक। धन्यवाद – EagerToLearn

4

आप किसी भी सीसीपीयू पर .NET कोड प्रोजेक्ट्स को छोड़ सकते हैं, हालांकि 32-बिट वाह सामग्री को मारने के बिना 64-बिट पर स्थापित करने के लिए आपको इंस्टॉलर प्रोजेक्ट प्रॉपर्टी को बदलने की आवश्यकता है।

यदि आपके पास इंस्टॉलर में कस्टम क्रियाएं हैं, तो यह 64-बिट में बदलते समय काम नहीं कर सकता है। आपको BadImageFormatException मिल सकता है। इसके समाधान के लिए, आप परिणामी एमएसआई के साथ faff की जरूरत है:

http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html

यह ग्राहक के लिए बहुत अधिक अंतर नहीं होगा यदि आपके आवेदन स्टैंडअलोन है। 64-बिट पर जाने पर, अधिक रैम तक पहुंच के अलावा, कोई भी मुफ्त प्रदर्शन लाभ नहीं है (हालांकि जेआईटी के पास विभिन्न प्रकार के अनुकूलन उपलब्ध हैं)।

एकमात्र स्थिति मैंने देखा है जहां 64-बिट की आवश्यकता होती है जब आप किसी अन्य अनुप्रयोग में डीएलएल का उपभोग करते हैं, तो आप एक ही प्रक्रिया में बिट-नेस मिश्रण नहीं कर सकते हैं।

अद्यतन: शायद 64-बिट ढांचे की आवश्यकता की कमी है क्योंकि आप वीएस 2005 का उपयोग कर रहे हैं?

http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/7b00f4e9-64e3-4fb6-9906-880820ecda92

+0

लेकिन मुझे डिटेक्टेड निर्भरता संवाद बॉक्स में .NET Framework 2.0 (64-बिट) विकल्प क्यों नहीं दिखाई देता है? – EagerToLearn

+0

@EagerToLearn मेरे अंदर एक प्रोजेक्टर के साथ एक परियोजना के बिना, मैं वास्तव में इसका उत्तर नहीं दे सकता - क्षमा करें। –

+0

64-बिट इंस्टॉलर बनाते समय, क्या मुझे PRERQUQUITITES संवाद बॉक्स में .NET Framework 2.0 (x64) के लिए कोई विकल्प देखने की उम्मीद नहीं करनी चाहिए? – EagerToLearn

2

64 बिट कर सकते हैं या प्रदर्शन अंतर नहीं दे सकता है। एक 64 बिट एप्लिकेशन 32 बिट एप्लिकेशन से अधिक मेमोरी (रास्ता) का उपयोग भी कर सकता है।

यदि आप 64 बिट ओएस पर कोई भी एपीपीयू एक्सई लॉन्च करते हैं तो इसे 64 बिट में लॉन्च करना चाहिए (टास्क मैनेजर में देखें, 32 बिट प्रक्रियाएं * 32 के साथ संलग्न हैं)।यदि आप x64 पर एप्लिकेशन सेट करते हैं, तो पुस्तकालय या तो x64 या AnyCpu होना चाहिए।

यदि आपके पास मूल x64- केवल संदर्भ नहीं हैं तो आप अपने exe और dll को AnyCpu के रूप में छोड़ सकते हैं, लेकिन आपको x64 पर सेटअप को संशोधित करने की आवश्यकता होगी।

फ्रेमवर्क के लिए, एक x64 मशीन पर (जो एकमात्र जगह एक x64 ऐप चलती है), फ्रेमवर्क में हमेशा 32 और 64 बिट दोनों शामिल होते हैं, जो सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework में पाए जाते हैं और क्रमशः फ्रेमवर्क 64।

+0

पर बनाया गया है और .NET Framework निर्भरता के बारे में क्या है, मुझे डिटेक्टेड निर्भरता संवाद में .NET Framework 2.0 (64 बिट) के लिए कोई विकल्प नहीं दिख रहा है – EagerToLearn

+0

मेरी देव मशीन है 32-बिट, और 64-बिट अनुप्रयोग के लिए इंस्टॉलर बनाते समय मुझे पता लगाया निर्भरता संवाद में .NET Framework 2.0 (64 बिट) के लिए वह विकल्प नहीं दिखाई देता है। मुझे – EagerToLearn

3

अब जब मैं 64-बिट मशीन पर setup.exe के माध्यम से इस एप्लिकेशन को स्थापित करता हूं, तो यह प्रोग्राम फ़ाइलें [x86] फ़ोल्डर में स्थापित होता है; मुझे लगता है कि 64- बिट एप्लिकेशन पर 32-बिट वातावरण को अनुकरण करने की वाह सुविधा है।

नहीं, प्रोग्राम के साथ केवल कुछ इंस्टॉलर के साथ ऐसा करने के लिए कुछ भी नहीं है।

• इंस्टालर (लक्ष्य प्लेटफार्म X86 करने के लिए सेट और पता लगाया गया निर्भरता .NET फ्रेमवर्क (x86) के लिए निर्धारित)

32 बिट संस्थापक कार्यक्रमों के लिए 32 बिट फ़ोल्डर में installes, regarless कि क्या कार्यक्रम है 32 या 64 बिट।

अफसोस की बात है कि आपके पास एक इंस्टॉलर दोनों नहीं हो सकता है - आपको डिज़ाइन द्वारा 32 के लिए एक इंस्टॉलर और अवधारणा में 64 बिट के लिए एक की आवश्यकता है।

यह एमएसआई भाग पर पूरी तरह से एक डिजाइन निर्णय है और, फिर से, कार्यक्रम के साथ कुछ भी नहीं है।

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